应用程序在自定义视图中覆盖 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 就会考虑您更新的约束。
我正在创建自定义视图,需要在方向更改时更新其子视图框架。为此,我在父视图中覆盖了 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 就会考虑您更新的约束。