Ios UIView封装布局高度和容器视图

Ios UIView封装布局高度和容器视图,ios,objective-c,autolayout,uicontainerview,Ios,Objective C,Autolayout,Uicontainerview,我有UIViewController 1,它有滚动视图。在这个滚动视图中有一个容器视图,它固定在顶部/底部前导/尾随(没有固定高度)容器视图将UITableView固定到顶部/底部尾随/前导和高度约束,该约束为0常量,将在更新约束中更改为内容大小高度 当UIViewController 1的视图出现时,容器视图具有约束: NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)], NSLayoutConstraint:0x7b0ba

我有
UIViewController 1
,它有
滚动视图
。在这个
滚动视图
中有一个
容器视图
,它固定在
顶部/底部前导/尾随
(没有固定高度)<代码>容器视图将
UITableView
固定到
顶部/底部尾随/前导
高度约束,该约束为0常量
,将在
更新约束
中更改为内容大小高度

当UIViewController 1的视图出现时,容器视图具有约束:

NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)], NSLayoutConstraint:0x7b0ba120 V:|-(0)-[UITableView:0x7c42a200](名称:“|”):UIView:0x7b0b7000), NSLayoutConstraint:0x7b0ba1b0 V:[UITableView:0x7c42a200]-(0)-|(名称:“|”):UIView:0x7b0b7000), NSLayoutConstraint:0x7b65f900'UIView封装布局高度'V:[UIView:0x7b0b7000(0)]

将尝试通过打破约束进行恢复

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


什么是
ui视图封装布局高度
t?我怎么能跳过它呢?因为它打破了“右”约束(我更新为内容大小高度)。谢谢设置容器视图的高度约束。创建所述高度约束的IBOutlet,称之为“ContainerViewWheeghtConstraint”或其他内容。将表视图的高度约束更新为54时,请执行以下操作:

self.containerViewHeightConstraint.constant = 54.0;

最后我发现了一个问题。作为子视图添加到容器视图的视图具有translatesAutoresizingMaskIntoConstraints=YES,因此NSLayoutConstraint:0x7b65f900“UIView封装布局高度”V:[UIView:0x7b0b7000(0)]出现,并使我遇到一些问题。添加运行时属性translatesAutoResizengMaskintoConstraints=NO,它将解决此问题。

而不是在单元格的
内容视图上手动设置
translatesAutoResizengMaskintoConstraints
,或手动调整此视图的高度,您只需为tableview设置
EstimateDrowEight
rowHeight
,如WWDC 2014视频中所述:


然后,应用于该单元格的完全限定约束将调整行高并消除那些恼人的警告。

当约束之间发生冲突时,就会出现这些问题

在本例中,您已经为内部表视图提供了顶部/底部前导/尾随约束,这满足了表视图所需的约束,因此不需要再为其提供一个约束(固定高度约束,常数为0)

以上两条线表示对于具有常数0的表视图,在垂直方向上存在一些冲突

有两种方法可以解决这个问题

1-删除高度约束,初始将底部约束设置为零。获取底部约束的出口,并动态设置底部约束值

2-删除底部空间约束,将高度约束设置为零。获取高度约束的出口并动态设置表视图的高度


希望这能对您有所帮助。

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

这是我的容器:

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


我之所以说“底部”,是因为根据我的估计,这可能是一条与您有冲突的边,但它可能是隐式设置容器宽度的任何边。

继续项目容器的xib->取消选择“绘图”部分下的“自动调整子视图大小”。它帮我修好了。(该项是为您提供约束冲突的项)


我终于解决了这个问题
1.在tableView设置中,设置:
tableView.estimatedRowHeight=100

2.在单元格的最后一个视图中,设置:
make.bottom.equalTo(contentView.priority)(999)


3.运行你的代码,也许没问题

我想这是你的tableview单元格的高度。你是怎么设置的?我对手机没有任何限制。单元格高度由返回tableView.rowHeight的heightForRowAtIndexPath:确定。这是怎么可能的?谢谢当你构建和运行时会出现什么?您是否尝试过更改视图的背景色,以便查看它们的绘制方式?显示了高度为零的容器视图。但是我想根据内容视图将其设置为大小,但是NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)]被删除,因为此约束NSLayoutConstraint:0x7b65f900'UIView封装布局高度'V:[UIView:0x7b0b7000(0)]如何使容器视图具有基于内容视图的高度(我确信内容视图对宽度/高度有正确的约束)?谢谢您的回答,但ContainerViewWheightConstraint和TableViewConstraint在不同的视图控制器中。我如何知道在视图控制器1中,当tableview约束更改时?谢谢您可以使用委派或NSNotificationCenter我希望(当然)这是一种糟糕的方法有更好的解决方案。不过,谢天谢地,糟糕的方法是使用子视图控制器。你应该避免这种做法。但我试着告诉你,你说的没有意义。你把所有东西都钉在边缘上,然后将高度设置为零,你一定会从自动布局中收到警告或错误。你应该调查我只在滚动视图中工作,容器固定在滚动视图中,因为滚动视图无法确定其内容大小。但我想要的是,容器视图的高度基于它所表示的内容。谢谢这解决了我的问题!添加容器视图后。使用prepareForSegue方法访问该视图,然后设置为false该视图的翻译自动调整大小GMaskintoConstraints也可以在界面构建中设置
- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 44;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}
NSLayoutConstraint:0x7b03e5f0 V:[UITableView:0x7c42a200(54)], NSLayoutConstraint:0x7b0ba120 V:|-(0)-[UITableView:0x7c42a200]