Xcode 5で自動レイアウトを使用しています。
テーブルビューの高さを200px以上に設定します。動的なサイズが必要です。多くの行がある場合もあれば、数行ある場合もあるためです。
ただし、サイズは常に200pxです。また、コンテンツがそれよりも大きい場合は、下にスクロールして下の行を表示する必要があります。
テーブルビューに動的なサイズを与えるにはどうすればよいですか?
これは、Xcodeの最新バージョンでテストされています。
1)Xcodeでストーリーボードに移動し、テーブルビューをクリックして選択します。
2)[ユーティリティ]ペイン(写真1を参照)で、テーブルビューの高さの制約が定義されていることを確認します。
3)テーブルビューを表示するView Controllerで、この制約へのアウトレットを作成します。
In Swift 3
@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint!
Objective Cで
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;
4)ストーリーボードでUITableView
の高さの制約に戻り、右側のアイコンの色が紫から青に変わったことを確認します(図2を参照)
4)また、同じView Controllerにこのコードを配置します。
Swift
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/TestTableviewAutolayouthttps://github.com/jcatalan007/TestTableviewAutolayoutSwift
xibまたはストーリーボードでセルを作成します。アウトレットのコンテンツを提供します。 CellForRowAtIndexPathで呼び出します。例えば。コメントのラベルテキストに従ってセルの高さを設定する場合。
コメントを設定しますLbl.numberOfLine = 0;
その後、ViewDidLoadで
self.table.estimatedRowHeight = 44.0 ;
self.table.rowHeight = UITableViewAutomaticDimension;
そしていま
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
出来上がり............あなたはそれをやった....
Ctrlキーを押しながらUITableViewの高さ制約をView Controllerのソースコードにドラッグして、名前を付けることができます。次に、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でテスト済み。