2017-03-14 25 views
3

私たちのUITableViewはViewController(TableViewControllerではなく)に存在します。実行時に2行のデータを取り込みます。高さの制約を設定すると、テーブルは正常に表示されます。 を指定しないとの高さの制約が設定されても、テーブルは完全に表示されません。どのように動的にその高さを設定するUITableViewを設定できますか?iOS:SwiftでUITableViewの高さを動的に設定しました

私は行の高さを動的に設定することについてのスレッドを見てきましたが(実際にはうまくいく)、実際のテーブルの高さについてはわかりません。この特定の点にはいくつかのスレッドがありますが、私にとってはうまくいくものはありません。


ソリューションのアップデート:ロボット猫は、我々は(我々はすでにことを持っていた)ストーリーボードでUITableView上の高さ制約を設定して、私たちのコントローラでIBOutletを作成するには、Ctrlドラッグをやっ示唆したように。そこから、我々はビネーシュの答えあたりのviewWillAppearに次のコードを実行:

tableViewHeightConstraint.constant = tableView.contentSize.height 

注上記のコードを実行する前に、我々は我々のテーブルを埋めるために、同じ方法でreloadData()を呼んでいます。

+1

制約は 'IBOutlet'を使って参照することができます。ストーリーボードでビューコントローラの制約を設定し、 'UIViewController'サブクラス(または' UITableView'の高さを画面の下端までの距離と同じように制御する制約)の 'UITableView'高さ制約へのコンセントを作成します。次に、高さに適切な値を設定します(固定値や画面の割合など)。 –

答えて

5

UITableViewの自動ディメンションはありません。UITableViewCellの高さにのみ影響します。テーブルビューの高さを動的に設定する場合は、テーブルビューの高さの制約を、テーブルビューの読み込みが完了した後のコンテンツサイズと同じに設定することをお勧めします。

tableViewHeightConstraint.constant = tableView.contentSize.height 
+0

contentSize.heightがビューの高さより小さい場合、これは問題ありません。 常に2つのセルしか持たず、常に同じ高さになることがわかっている場合は、tableViewが必要ない場合があります。単純なUIViewを持つことができます。 @SilentBob。 – silentBob

+1

私は同意しますありがとう、しかし、私はそれが明らかであると思った、そして、マーカスは、テーブルビューのサイズがビューの高さを越えることがあるかどうか質問しなかったでしょう。完了するには、MIN(contentSize、viewSize)で折り返すことで簡単に修正できます。 – Vignesh

+0

ありがとうございます。将来、私たちは3行か4行などを持っているかもしれません。私がするなら、私はmin関数を使います。我々は、各セルが全く同じレイアウトを持つことを望んでいたので、単純なUIViewではなくテーブルビューを使用しました。レイアウトをテーブルなしで別の行に「クローン」する方法がわかりませんでした(それが理にかなっていれば)。 –

1

あなたは、アニメーションなど

tableView.frame = CGRect(x: leftTableBorder, y: topTableBorder, width: tableWidth, height: tableHeight) 

それとも、あなたが希望する場合にも、アニメーション、のtableView関連の制約を変更してlayoutIfNeededとの制約を更新することができますし、複数の方法でのtableViewフレームを変更することができます。例えば

あなたは、高さ制約プロパティがある場合:自動レイアウトは、テーブルをレンダリングする方法を知っているので、いずれの場合においても

tableViewHeightConstraint.constant = desiredHeight 

layoutIfNeeded() 

は、制約は、必要とされています。

関連する問題