web-dev-qa-db-ja.com

UIStackViewに比例して塗りつぶします

ストーリーボードを使用して、下部のUITableViewとUIViewで構成されるレイアウトを作成しています。私はUIStackViewを使用し、それらを垂直に再生しています。 UITableViewで高さの80%を取得し、UIView(フッター)で20%を取得する必要があります。私はUIStackViewのFill Proportionallyオプションを使用していますが、Xcodeプレビューでも見栄えは良いですが、アプリを実行すると正しくレンダリングされません。私はそれがどのように見えるようにしたいのですか?

enter image description here

そして、実行すると次のようになります。

enter image description here

アイデア?

15
john doe

TableView.heightをビューのサイズの4倍にするには、明示的な制約を設定する必要があります。固有のコンテンツサイズがないため、stackViewはスペースを適切に埋める方法を「知りません」。

また、.fillは固有のコンテンツサイズを使用して適切な配布を決定するため、配布モードを.fillProportionallyに設定します( docs からの抜粋):

ケースフィル

スタックビューが配置されたビューのサイズを変更して、スタックビューの軸に沿って利用可能なスペースを埋めるレイアウト。ビューは、スタックビューの軸に沿った固有のコンテンツサイズに基づいて比例的にサイズ変更されます。

制約を使用して、固有のコンテンツサイズを使用せずに、明示的にサイズを設定しています。したがって、.fillProportionallyは機能しません。その場合、stackViewview.intrinsicContentSizeによって返された値を直接使用すると仮定します。ただし、制約はview.intrinsicContentSizeを変更しません。

コードでそれを行う場合、これでそれを行うことができます:

tableView.heightAnchor.constraint(equalTo: myView.heightAnchor, multiplier: 4).isActive = true

ストーリーボードで、tableViewからmyViewへのドラッグを制御し、Equal Heightsを選択します。

enter image description here

次に、作成された制約を選択し、適切な乗数を設定します。

enter image description here

19
Milan Nosáľ

ストーリーボードのドキュメントアウトラインで、トップビューからスタックビューにコントロールドラッグして、[等しい高さ]を選択します。サイズインスペクターに移動すると、制約が表示されます。それをダブルクリックして、乗数を0.2に設定します。次に、フレームを更新します。

enter image description here

スタックビューの分布を塗りつぶしとして保持します。

enter image description here

等しい高さの制約を作成するには、view2からview1へのドラッグを制御します。

enter image description here

制約に移動し、乗数を0.2に設定します。

enter image description here

9
Gihan