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

Application getting crash on overriding layoutSubviews method in custom view iOS 7.0

我正在创建自定义视图,需要在方向更改时更新其子视图框架。为此,我在父视图中覆盖了 layoutSubviews。

在 layoutSubviews 中,我正在删除以前的约束并向其子视图添加新约束。

我首先在覆盖方法中调用 [super layoutSubviews];。它在 iOS8 之后工作正常,但在 iOS 7.0 及以下 iOS8 时会崩溃。 在日志中获取以下消息

Terminated due to uncaught exception 'NSInternalInconsistencyException' reason Auto layout still required after executing layoutSubviews. Parent view's layoutSubviews needs to call super.

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

我的问题是重写 layoutSubviews 的正确方法是什么。

我是不是做错了什么?

我们是否应该在layoutSubviews中对子视图添加约束。 或者是否有更好的方法来实现相同的输出。

我觉得你没有做错。正如它错误所说的那样,它在尝试对其子视图进行布局时需要自动布局约束。因此,在调用 [super layoutSubviews] 之前,您应该处理约束问题。

If I call [super layoutSubviews]; after modifying the constraints... it's working in iOS7 and iOS8 both.

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