所以我是新来的约束。
我有一个 nib 文件,其中包含多个视图作为兄弟姐妹。ViewController 的视图包含一个 tableView,我还有另一个将添加到 tableHeaderView 的视图(我们称之为 self.tableHeaderView)。
我面临的问题是我想根据某些条件调整 self.tableHeaderView 的大小。我已经为我的所有 UI 元素添加了约束,但无论出于何种原因,我都无法通过 nib 向 self.tableHeaderView 添加高度约束。
我尝试以编程方式更改 self.tableHeaderView 的框架,但是当我在模拟器中运行代码时这没有效果,这是有道理的,因为如果我使用自动布局,它应该忽略框架更改。
我尝试以编程方式添加高度约束,但它崩溃了。
这是我要添加高度约束的一段代码。
[self.tableHeaderView addConstraint:[NSLayoutConstraint constraintWithItem:self.tableHeaderView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0f constant:107.0f]];
我得到的异常:*** -[UITableView layoutSublayersOfLayer:] 中的断言失败,/SourceCache/UIKit_Sim/UIKit-2903.2/UIView.m:8536
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。UITableView 的 -layoutSubviews 实现需要调用 super.'*
最坏的情况我将添加另一个具有第二个高度的同级视图并复制 UI 元素,但我想避免这种情况。
编辑 1:当我有这个 self.topicHeaderView.translatesAutoresizingMaskIntoConstraints = NO;
如果我没有它,我会得到这个
无法同时满足约束。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的;(2) 找到添加了一个或多个不需要的约束的代码并修复它。(注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)(“”,“”)
将尝试通过打破约束来恢复
中断 objc_exception_throw 以在调试器中捕获它。中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。
编辑:2 在 4" 屏幕上,它看起来不错(红色背景覆盖了整个 tableHeaderView,正如我所料)
在 3.5" 屏幕上,红色背景(应用在笔尖上,延伸到一定高度,即使我将高度设置为 117.0f。tableHeaderView 内的 UI 元素正确显示)
底部的蓝线是分隔线,蓝色边框在 tableHeaderView 周围。