1

我有一个容器视图:

1

我有一个表格视图,我以编程方式添加到容器中:

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

这里的结果是 table 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 回答