应用程序在自定义视图iOS 7.0中覆盖layoutSubviews方法时崩溃

时间:2015-09-03 19:51:01

标签: ios objective-c ios-autolayout

我正在创建自定义视图,需要在方向更改时更新其子视图框架。为了实现这一点,我在父视图中覆盖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中为子视图添加约束吗? 或者是否有更好的方法来实现相同的输出。

2 个答案:

答案 0 :(得分:0)

我认为你做错了。正如它错误地说,它在尝试布局它的子视图时需要自动布局约束。因此,在致电[super layoutSubviews]之前,您应该处理约束性内容。

答案 1 :(得分:0)

  

如果我调用[super layoutSubviews];在修改约束之后...它在iOS7和iOS8中都有效。

这是正确的方法 - 您应该在调用[super layoutSubviews];之前修改约束。这样AutoLayout会考虑您更新的约束。