1

私はコンテナビューを持っています:

1

プログラムでコンテナーに追加するテーブル ビューがあります。

self.searchResultsSourcesTVC = [storyboard instantiateViewControllerWithIdentifier:@"searchResultsSourcesTVC"];    
[self.searchResultsContainer addSubview:self.searchResultsSourcesTVC.view];

この結果、テーブル ビューはコンテナーに収まるように自動的にサイズ変更されません。スクロールバーが画面の南に完全に消える程度まで、画面の南にかなり伸びているようです。ただし、テーブルと検索結果は表示されます。

そこで、テーブル ビューの垂直方向の境界をコンテナー ビューの垂直方向の境界と一致させるために、制約を追加しようとしました (自動レイアウトを使用しています)。

UITableView *tableView = self.searchResultsSourcesTVC.tableView;
NSDictionary *views = NSDictionaryOfVariableBindings(tableView);

tableView.translatesAutoresizingMaskIntoConstraints = NO; // without this line there are conflicts

[self.searchResultsContainer addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[tableView]|" options:0 metrics:Nil views:views]];
[self.view layoutIfNeeded]; // not sure whether this line is necessary

現在、テーブルはまったくありません。単なる空白のビュー。

私は何を間違っていますか?テーブル ビューをコンテナ ビューにプログラムで追加し、テーブル ビューの境界をコンテナ ビューの境界と同じにする最良の方法は何ですか? ありがとう

4

1 に答える 1

7

必要なサイズを完全に説明するのに十分な制約がないようです。たとえば、水平方向の制約がないようです。レイアウトするビューのサイズを完全に表現するには、通常 4 つの制約が必要です。具体的には、中心 X、中心 Y、幅、および高さが必要です。

例えば:

NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterX relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
NSLayoutConstraint *con3 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeWidth relatedBy:0 toItem:view attribute:NSLayoutAttributeWidth multiplier:1 constant:0];
NSLayoutConstraint *con4 = [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight relatedBy:0 toItem:view attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
NSArray *constraints = @[con1, con2, con3, con4];
[self.searchResultsController addConstraints:constraints];
于 2013-10-14T20:12:41.393 に答える