Xcode 5 で autolayout を使用しています。
テーブル ビューの高さを 200px 以上に設定しました。動的サイズにしたい。行数が多い場合もあれば、行数が少ない場合もあるためです。
ただし、サイズは常に 200px です。コンテンツがそれよりも大きい場合は、下にスクロールして下の行を表示する必要があります。
テーブルビューに動的サイズを与えるにはどうすればよいですか?
Xcode 5 で autolayout を使用しています。
テーブル ビューの高さを 200px 以上に設定しました。動的サイズにしたい。行数が多い場合もあれば、行数が少ない場合もあるためです。
ただし、サイズは常に 200px です。コンテンツがそれよりも大きい場合は、下にスクロールして下の行を表示する必要があります。
テーブルビューに動的サイズを与えるにはどうすればよいですか?
これは、最新バージョンの Xcode でテストされています。
1)Xcodeでストーリーボードに移動し、テーブルビューをクリックして選択します。
2) [ユーティリティ] ペイン (図 1 を参照) で、テーブル ビューの高さの制約が定義されていることを確認します。
3) テーブル ビューを表示するビュー コントローラーで、この制約へのアウトレットを作成します。
スウィフト3では
@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint!
目的 C で
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;
4) ストーリーボードで の高さの制約に戻りUITableView
、右側のアイコンの色が紫から青に変わったことを確認します (図 2 を参照)。
4) このコードも同じビュー コントローラーに配置します。
迅速
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let height = min(self.view.bounds.size.height, tableView.contentSize.height)
dynamicTVHeight.constant = height
self.view.layoutIfNeeded()
}
オブジェクティブ C
- (void)viewWillAppear:(BOOL)animated
{
// just add this line to the end of this method or create it if it does not exist
[self.tableView reloadData];
}
-(void)viewDidLayoutSubviews
{
CGFloat height = MIN(self.view.bounds.size.height, self.tableView.contentSize.height);
self.dynamicTVHeight.constant = height;
[self.view layoutIfNeeded];
}
これで問題が解決するはずです。
これらは、必要な機能を実行するサンプル プロジェクトの 2 つのバージョンへのリンクです。1 つは Objective C 用で、もう 1 つは Swift 3 用です。ダウンロードして Xcode でテストします。どちらのプロジェクトも、Xcode の最新バージョンである Xcode 8.3.2 で動作します。
https://github.com/jcatalan007/TestTableviewAutolayout https://github.com/jcatalan007/TestTableviewAutolayoutSwift
UITableView の高さの制約を Ctrl キーを押しながらビュー コントローラーのソース コードにドラッグし、名前を付けることができます。次に、ViewController の updateViewConstraints で、その制約の定数を tableView.contentSize.height に設定できます。
....
@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint?
....
override func updateViewConstraints() {
super.updateViewConstraints()
tableViewHeightConstraint?.constant = tableView.contentSize.height
}
それはプログラムで行うことができます。概念 (およびコード自体) は実際には非常に単純です。
myTableView のスーパービューの updateConstraints メソッドで、myTableView の高さが myTableView.contentSize.height と等しくなるように制約を追加します。
iOS 7 を対象とする Xcode 6 でテスト済み。