35

Xcode 5 で autolayout を使用しています。

テーブル ビューの高さを 200px 以上に設定しました。動的サイズにしたい。行数が多い場合もあれば、行数が少ない場合もあるためです。

ただし、サイズは常に 200px です。コンテンツがそれよりも大きい場合は、下にスクロールして下の行を表示する必要があります。

テーブルビューに動的サイズを与えるにはどうすればよいですか?ここに画像の説明を入力

4

5 に答える 5

66

これは、最新バージョンの 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

于 2013-08-29T13:25:22.200 に答える
2

UITableView の高さの制約を Ctrl キーを押しながらビュー コントローラーのソース コードにドラッグし、名前を付けることができます。次に、ViewController の updateViewConstraints で、その制約の定数を tableView.contentSize.height に設定できます。

....

@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint?

....

override func updateViewConstraints() {
    super.updateViewConstraints()
    tableViewHeightConstraint?.constant = tableView.contentSize.height
}
于 2015-08-17T12:28:56.053 に答える
2

それはプログラムで行うことができます。概念 (およびコード自体) は実際には非常に単純です。

myTableView のスーパービューの updateConstraints メソッドで、myTableView の高さが myTableView.contentSize.height と等しくなるように制約を追加します。

iOS 7 を対象とする Xcode 6 でテスト済み。

于 2015-01-28T03:54:07.433 に答える