UIView-Encapsulated-Layout-Height和Container View

Ser*_*erd 10 objective-c ios autolayout uicontainerview

我有UIViewController 1,那scroll view.在这scrollview里面有container view固定的top/bottom leading/trailing(没有固定的高度).Container view已经UITableView固定到top/bottom trailing/leadingheight constraint with 0 constant,将在改变updateViewConstraints内容的大小的高度.

当出现UIViewController 1的视图时,Container View具有约束:

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)],NSLayoutConstraint:0x7b0ba120 V:| - (0) - [UITableView:0x7c42a200](名称:'|':UIView:0x7b0b7000),NSLayoutConstraint:0x7b0ba1b0 V:[UITableView: 0x7c42a200] - (O) - | (名称:'|':UIView:0x7b0b7000),NSLayoutConstraint:0x7b65f900'UIView-Encapsulated-Layout-Height'V:[UIView:0x7b0b7000(0)]

将尝试通过打破约束来恢复

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)]

什么是UIView-Encapsulated-Layout-Heigh?我怎么能跳过它?因为它打破了"正确"约束(我更新到内容大小高度).谢谢

小智 15

最后我解决了这个问题.
1.在tableView设置中,设置:tableView.estimatedRowHeight = 100.
2.在单元格的最后一个视图中,设置:make.bottom.equalTo(contentView).priority(999).
3.运行你的代码,也许没关系!

  • 我搜索了很长时间,这确实有效。 (3认同)
  • 将最终连接约束的优先级降低到单元格的contentView似乎是正确的答案。如果您看到相同的问题,这也适用于UICollectionViewCell。 (3认同)

Ser*_*erd 14

最后我发现了一个问题.作为子视图添加到容器视图的视图具有translatesAutoresizingMaskIntoConstraints = YES,因此NSLayoutConstraint:0x7b65f900'UIView-Encapsulated-Layout-Height'V:[UIView:0x7b0b7000(0)]出现并使我遇到了一些问题.添加运行时属性translatesAutoresizingMaskIntoConstraints = NO,它将解决问题.


Sim*_*lGy 6

用最简单的方法之一解决此问题:降低绑定到容器视图底部边缘的自动布局规则的优先级

这是我的容器:

在此处输入图片说明

我告诉该图像视图遵循容器的底部边缘,这给了我一个冲突。要解决此问题,我可以降低该底边规则的优先级:

在此处输入图片说明

我说“底部”是因为据我估计,这可能是您将要与之发生冲突的地方,但是它可能是任何隐式设置容器宽度的边。


bey*_*ulf -1

设置容器视图的高度约束。创建一个具有所述高度约束的 IBOutlet,将其称为“containerViewHeightConstraint”或其他名称。当您将表视图的高度约束更新为 54 时,请输入以下内容:

self.containerViewHeightConstraint.constant = 54.0;
Run Code Online (Sandbox Code Playgroud)