web-dev-qa-db-ja.com

UIView-カプセル化-レイアウト-高さとコンテナビュー

私はUIViewController 1を持っています、それはscroll viewを持っています。このscrollviewの中には、container viewに固定されたtop/bottom leading/trailingがあります(高さは固定されていません)。 Container viewにはUITableViewtop/bottom trailing/leadingheight constraint with 0 constantに固定されており、updateViewConstraintsでコンテンツサイズの高さに変更されます。

UIViewController 1のビューが表示されると、コンテナビューには次の制約があります。

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)]、NSLayoutConstraint:0x7b0ba120 V:|-(0)-[UITableView:0x7c42a200](名前: '|':UIView:0x7b0b7000)、NSLayoutConstraint:0x7b0ba1b0 V:[UI 0x7c42a200]-(0)-| (名前: '|':UIView:0x7b0b7000)、NSLayoutConstraint:0x7b65f900'UIView-Encapsulated-Layout-Height 'V:[UIView:0x7b0b7000(0)]

制約を破って回復を試みます

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)]

UIView-Encapsulated-Layout-Heightとは何ですか?どうすればスキップできますか?「正しい」制約(コンテンツサイズの高さに更新する)が壊れているためです。ありがとうございます。

10
Serd

最後に私はこの問題を解決します。
1。 tableView設定で、_tableView.estimatedRowHeight = 100_を設定します。
2。セルの最後のビューで、make.bottom.equalTo(contentView).priority(999)を設定します。
3。あなたのコードを実行してください、多分それは大丈夫です!

19
小良俨

ついに問題を見つけました。コンテナビューにサブビューとして追加されたビューはtranslatesAutoresizingMaskIntoConstraints = YESであるため、NSLayoutConstraint:0x7b65f900'UIView-Encapsulated-Layout-Height 'V:[UIView:0x7b0b7000(0)]が表示され、いくつかの問題が発生しました。ランタイム属性translatesAutoresizingMaskIntoConstraints = NOを追加すると、問題が修正されます。

16
Serd

これを解決する最も簡単な方法の1つでチャイムを鳴らします:コンテナビューの下端にバインドされている自動レイアウトルールの優先度を下げるだけです。

これが私のコンテナです:

enter image description here

その画像ビューがコンテナの下端をたどるように言っているのですが、それが原因で競合が発生していました。これを修正するには、そのボトムエッジルールの優先度を下げることができます。

enter image description here

私の見積もりではおそらく競合する可能性があるため、「下」と言いますが、コンテナに暗黙的に幅を設定するのは任意のEdgeである可能性があります。

7
SimplGy

セルのtranslatesAutoresizingMaskIntoConstraintscontentViewを手動で設定したり、このビューの高さを手動で調整したりするのではなく、テーブルビューにestimatedRowHeightrowHeightを設定するだけです。 、WWDC 2014ビデオで説明されているように テーブルビューとコレクションビューの新機能

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 44;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}

次に、そのセルに適用する完全修飾制約により、行の高さが調整され、これらの迷惑な警告が排除されます。

2
Rob

コンテナビューの高さの制約を設定します。上記の高さ制約のIBOutletを作成し、「containerViewHeightConstraint」などと呼びます。テーブルビューの高さ制約を54に更新するときは、次のように言います。

self.containerViewHeightConstraint.constant = 54.0;
0
beyowulf

これらの問題は、制約間に衝突がある場合に発生します。

あなたの場合、テーブルビューに必要な制約を満たす内部テーブルビューに上部/下部の先行/末尾制約をすでに与えているので、もう1つの制約(定数0の固定高さ制約)を提供する必要はありません。

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)], NSLayoutConstraint:0x7b0ba120 V:|-(0)-[UITableView:0x7c42a200]

上記の2行は、定数0のテーブルビューの垂直方向に衝突があることを意味します。

これを解決する2つの方法、

1-高さの制約を削除し、下部の制約を最初からゼロに設定します。下部拘束の出口を取り、下部拘束値を動的に設定します。

2-下部スペースの制約を削除し、高さの制約をゼロに設定します。高さ制約の出口を取り、テーブルビューの高さを動的に設定します。

これがお役に立てば幸いです。

0
Vikas Mishra

アイテムのコンテナのxibに移動し、[描画]セクションの[サブビューの自動サイズ変更]の選択を解除します。それは私のためにそれを修正しました。 (アイテムはあなたに制約の衝突を与えているアイテムです)

drawing

0