【发布时间】:2013-09-21 08:02:25
【问题描述】:
所以我是新手。
我有一个包含多个视图作为兄弟的 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周围。
【问题讨论】:
标签: iphone ios objective-c constraints nib