2017-11-16 45 views
1

簡単な目標ですが、自動レイアウトが私に頭痛を与える状況を示しています。レイアウトに基づいて幅が256ptおよびの動的な高さののスタックビューが必要です(手動で高さを指定する必要はありません)。 画像ビューのサイズは64pt x 64ptである必要があります。また、水平方向に中心を合わせてにする必要があります。また、スーパービューの上部から拘束した8ptを指定する必要があります。イメージビューは唯一の子ではないことに注意してください。なぜスタックビューの高さを動的にサイズ調整する必要があるのでしょうか。基本的な自動レイアウト - ネストされた幅と動的な高さ

自動レイアウトでは、スタックビューの256pt幅の制約と画像の64pt幅の制約との間に紛らわしいことがあります。また、不思議な "leading = Image.leading"と "trailing = Image.trailing"私は削除したり見つけたりすることはできません。

ここで、オートレイアウトに関して何か不足していますか?私はすべてのロジックがインタフェースビルダーに含まれると期待しているので、コードは必要ありません。 Xcodeの9.1

実行

Layout image

+0

あなたが達成しようとしているものがUIStackViewのプロパティに適合しない場合は、UIStackViewの内部で余裕を設定することができない場合があります。 –

答えて

2

混同することは何もありません。 iOSが明らかにあなたに問題を伝えます。

StackViews子コンポーネントのサイズに基づいてサイズを取る(これは暗黙のサイズと呼ばれます)。これは256ptの場合のように手動で上書きされない限りです。

stackViewは水平または垂直に積み重ねられた複数のchildViewのコンテナであるため、imageViewを1つだけ追加したため、leadingtrailingという制約が追加されています。ビューのスタック、今どのようなstackViewを行う必要がありますか?独自のサイズにchildView(あなたのケースではimageView)を伸ばす。

しかし、画像ビューの幅を増やそうとすると、今度は幅制限をimageViewに追加したため、許可しませんでした。

したがって、矛盾する制約が多すぎると不平を言っています。ザッツすべて:)

私も削除も見つけることができないいくつかの神秘的な「リード= Image.leading」と「末尾の= Image.trailing」競合。

imageViewはstackView内の唯一のビューなので、削除できません。スタックする子ビューは1つだけなので、スタックビューは左端(先頭)から右端(末尾)に開始します。今stackViewは独自の幅を持っているので、同じを反映するようにimageViewの幅を変更しようとします!しかし、画像の幅の制約により、画像の幅が制限されます。

imageViewをスタックビューに追加して、何を達成しようとしていますか? stackViewにビューが1つしかない場合は、stackViewを追加しても意味がありません。あなたがしていることを再考してください。

最後に、スタックビューでchildViewが1つしかない場合、水平中央を追加しても意味がありません(垂直/水平スタックビューに関係なく)。

+0

@Johan Svensson:回答があれば回答を受け入れることを検討してください –