2017-08-29 7 views
0

ビューに含まれるテーブルビューを追加しようとしています。このビューには幅の制約があり、ビューの高さはテーブルビューのコンテンツの高さによって決まります。しかし、私はこれを動作させることができません。ビューに埋め込まれたUITableViewは、それに応じてサイズ変更されません。

私の試み: 私はleadingtopwidthconstraintでビューを作成します。次に、このビュー内にテーブルビューを挿入します。このテーブルビューには、ビューに先頭、上端、下端、後端の制約があります(superview)。私はまた行の高さと推定値を設定します。コードを実行すると、numberOfRowsInSectionが呼び出されますが、cellForRowAtはありません。私の推測は、高さが正しく解決されず、テーブルの高さが0であるためです。これをどのように修正できますか?

ありがとうございました。

+0

単語に説明している内容を人々が理解しやすくするために、いくつかのコードを質問に追加してください。そして、あなたのcellForRowは、デリゲートメソッドで0を返した場合には呼び出されません。 UITableViewのコンテンツの高さに基づいてUIViewの高さを返したいのですが、UIViewの高さを設定する前にUITableViewを呼び出す必要があります。これはチキンと卵の問題です。テーブルビューの正の高さを設定してセルを返す必要があります。したがって、UITableviewデリゲートを呼び出す前に、UITableViewメソッドの外で高さを計算する必要があります –

答えて

0

ルイス、

UITableViewUIScrollViewを継承しています。だから、tableViewがそのスーパービューの高さを提供すると期待することはできません。実際にはその逆です。

TableViewのframeは、提供したデータによってtableViewのcontentSizeが決定されるsuperViewのフレームによって決定されます。

だからあなたの最高の賭け

解決方法1:

  1. は、ビュー(スーパー)までの高さの制約を追加し、VCでそれにIBOutletを作成します。

  2. は50

  3. は、あなたがのtableViewにreloadData()を呼び出す前にtableViewに表示するデータを取得

    viewsHeightConstraintとしてビューの高さ制約の定数を設定するとと言うことができますのtableView内の各セルの高さを設定します.constant =(numberOfRows)* 50;

    yourView.layoutIfNeeded()

解決方法2:

あなたはセルの自動高さを使用することを計画している場合は、その後のtableViewのContentSizeに基づいてビューの高さを設定します。しかし、まず、データを取得して、データでtableViewをリロードしてから、今度はTableViewのコンテンツサイズを取得し、それに応じてビューのフレームを設定する必要があります。