我正在创建自定义视图,需要在方向更改时更新其子视图框架。为了实现这一点,我在父视图中覆盖layoutSubviews。
在layoutSubviews中,我将删除先前的约束并向其子视图添加新约束。
我首先在overriden方法中调用if(bool) {
// Do something
}
else {
//Do this
}
。它在iOS8以上运行良好,但在iOS 7.0和iOS8以下崩溃。
在日志中获取以下消息
[super layoutSubviews];
如果我在修改约束后调用Terminated due to uncaught exception 'NSInternalInconsistencyException' reason Auto layout still required after executing layoutSubviews. Parent view's layoutSubviews needs to call super.
,即最后在layoutSubviews中调用它,它们都在iOS7和iOS8中工作。
我的问题是覆盖layoutSubviews的正确方法是什么。
我做错了吗?
我们应该在layoutSubviews中为子视图添加约束吗? 或者是否有更好的方法来实现相同的输出。
答案 0 :(得分:0)
我认为你做错了。正如它错误地说,它在尝试布局它的子视图时需要自动布局约束。因此,在致电[super layoutSubviews]
之前,您应该处理约束性内容。
答案 1 :(得分:0)
如果我调用[super layoutSubviews];在修改约束之后...它在iOS7和iOS8中都有效。
这是正确的方法 - 您应该在调用[super layoutSubviews];
之前修改约束。这样AutoLayout会考虑您更新的约束。