关于自动布局和UIScrollViews有一百万个问题,但我认为这是不同的。
我有一个看起来像这样的结构:
白色背景是一个UIView,它充当UIScrollView中的容器(获取滚动视图以构建其自己的内容大小的典型设置,以便它根据容器视图正确滚动)。
TableView 1和TableView 2需要具有动态的高度。我不想让它们滚动,所以我需要将它们的框架高度设置为等于它们的内容高度。
我有IBOutlets用于每个的高度约束,并且可以毫无问题地调整它们。
当我尝试调整容器视图的高度时出现问题。最后,我想不必弄乱它并让视图根据其内容自动调整大小,但这似乎不起作用(如果我忽略容器视图的高度,我会在IB中收到警告/错误关于约束)。
如果我为容器视图的高度约束创建一个插座并设置它,我会得到一个断言失败:
*** Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit_Sim/UIKit-2935.137/UIView.m:8803
我在viewDidLayoutSubviews中进行约束调整,如下所示:
- (void)viewDidLayoutSubviews {
self.orderItemTableViewHeightConstraint.constant = self.orderItemTableView.contentSize.height - [self tableView:self.orderItemTableView heightForHeaderInSection:0];
self.shippingOptionTableViewHeightConstraint.constant = self.shippingMethodTableView.contentSize.height;
self.scrollViewContainerViewHeightConstraint.constant = self.cardInfoLabel.$bottom + 60;
}
我认为问题是设置容器视图的高度约束导致一些递归或某事......
问题:
感谢您的任何意见!
答案 0 :(得分:8)
好吧,好吧,只是在这里拍摄代码,但经过多次试验和错误,这似乎解决了断言失败并给出了预期的结果:
- (void)viewDidLayoutSubviews {
self.orderItemTableViewHeightConstraint.constant = self.orderItemTableView.contentSize.height - [self tableView:self.orderItemTableView heightForHeaderInSection:0];
self.shippingOptionTableViewHeightConstraint.constant = self.shippingMethodTableView.contentSize.height;
[self.view layoutIfNeeded];
self.scrollViewContainerViewHeightConstraint.constant = self.cardInfoLabel.$bottom + 60;
[self.view layoutIfNeeded];
}
真的想让这个更有活力,但是会在游戏中获得胜利!
希望这有助于其他人。