我目前在Interface的UITableViewController中嵌入了一个UIContainerView。是否有方法将UIContainerView的高度设置为内容的高度(使用原型单元格)?基本上,我想要的是在我的UIScrollView周围设置一个UIContainerView,并将一些AutoLayout规则设置到我的UIContainerView中,这样就可以从里面的单元格数计算出高度,并且父UIScrollView相应地调整它的滚动区域。
编辑
感谢这些伟大的答案,最后使用以下代码更改了帧高:
alarmsTableViewController.view.layoutIfNeeded()
println(alarmsTableViewController.tableView.contentSize.height)
alarmsContainerView.frame.size.height = alarmsTableViewController.tableView.contentSize.height发布于 2015-02-09 17:34:25
编程干预是必需的: UITableViews当然是UIScrollViews,嵌套的滚动视图无法在AutoLayout中调整自身大小。这是一个合理的含糊不清,因为AutoLayout将不知道如何使框架更小,需要更多的滚动或帧更大,更少的滚动。在您的情况下,您希望后者没有滚动。
解决这一问题的最简单方法是为TableView (或其容器视图)的高度创建一个约束。这将作用于tableView的框架,如果设置为任何方向的内容大小(仅在表视图中垂直),滚动视图将不会滚动。最好在包含tableView的视图中添加/修改它。然后访问表视图的contentSize属性。实际代码非常简单:
-(void)updateViewConstraints {
self.tableViewHeightLayoutConstraint.constant = self.tableviewInMyScrollView.contentSize.height;
[super updateViewConstraints];
}如果滚动视图中的其他内容在AutoLayout引擎运行时都具有固定的高度和宽度,这应该会自动调整其内容的滚动视图大小。
发布于 2015-02-09 14:55:29
我在我的项目中所做的是在-(void)updateViewConstraints中对ViewController进行更新,这是一个由IBOutlet给出的约束,这取决于tableView中单元格的数量。例如:
-(void)updateViewConstraints{
float newHeigh = ([self.array count] + 1) * 84;
self.topViewHeightConstraint.constant = newHeigh + 540;
[super updateViewConstraints];
}https://stackoverflow.com/questions/28411983
复制相似问题