new*_*per 5 iphone constraints objective-c nib ios
所以我对限制很新.
我有一个包含多个视图作为兄弟的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]];
Run Code Online (Sandbox Code Playgroud)
我得到的例外:***断言失败 - [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,也会延伸到一定高度.表格内部的UI元素正确显示)

底部的蓝线是分隔线,蓝色边框位于tableHeaderView周围.
将视图作为页眉或页脚添加到表视图时,不能在此视图上使用约束,而只能在其中使用约束.此外,视图必须位于层次结构的顶部(如您所示),如果将其作为子视图移动到另一个视图,则会产生相同的错误.
您可以通过设置更改高度的相同框架直接在代码中更改视图的高度.这工作正常.
另请注意,在重新分配标头之前,此更改将不适用:
tableView.tableHeaderView.frame = ...;
tableView.tableHeaderView = tableView.tableHeaderView;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8292 次 |
| 最近记录: |