我目前在Interface Builder中的UIContainerView中嵌入了一个UITableViewController。有没有办法将UIContainerView的高度设置为内容的高度(使用原型单元格)?基本上,我想要的是在我的UIContainerView周围有一个UIScrollView,并为我的UIContainerView设置一些AutoLayout规则,以便根据内部单元格的数量计算高度,并且父UIScrollView相应地调整其滚动区域。
修改
感谢很棒的答案,最后使用以下代码更改了帧高:
alarmsTableViewController.view.layoutIfNeeded()
println(alarmsTableViewController.tableView.contentSize.height)
alarmsContainerView.frame.size.height = alarmsTableViewController.tableView.contentSize.height
答案 0 :(得分:1)
我在我的项目中所做的是在-(void)updateViewConstraints
内的ViewController更新由IBOutlet
给出的约束,具体取决于tableView中的单元格数量。例如:
-(void)updateViewConstraints{
float newHeigh = ([self.array count] + 1) * 84;
self.topViewHeightConstraint.constant = newHeigh + 540;
[super updateViewConstraints];
}
答案 1 :(得分:1)
需要编程干预:UITableViews当然是UIScrollViews,嵌套的scrollview无法在AutoLayout中自行调整大小。这是一种合法的歧义,因为AutoLayout不会知道如何使帧更小并且需要更多滚动或更大的帧和更少的滚动。在您的情况下,您希望后者没有滚动。
解决此问题的最简单方法是为TableView(或其容器视图)的高度创建约束。这将作用于tableView的框架,如果设置为大于任何方向的内容大小(仅在tableviews中为垂直),滚动视图将不会滚动。最好在包含tableView的视图中添加/修改它。然后访问表视图的contentSize属性。实际代码非常简单:
-(void)updateViewConstraints {
self.tableViewHeightLayoutConstraint.constant = self.tableviewInMyScrollView.contentSize.height;
[super updateViewConstraints];
}
如果滚动视图中的其他内容都有高度和高度。在AutoLayout引擎运行时固定的宽度,应自动调整其内容的scrollview大小。