【问题标题】:Application getting crash on overriding layoutSubviews method in custom view iOS 7.0应用程序在自定义视图 iOS 7.0 中覆盖 layoutSubviews 方法时崩溃
【发布时间】:2015-09-03 19:51:00
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c ios-autolayout


    【解决方案1】:

    如果我调用 [super layoutSubviews];修改约束后...它在 iOS7 和 iOS8 都可以工作。

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

    【讨论】:

      【解决方案2】:

      我认为你没有做错。正如它错误地所说,当它试图布局它的子视图时,它需要自动布局约束。所以在你打电话给[super layoutSubviews] 之前,你应该处理约束的东西。

      【讨论】:

      • 感谢 Candost 的评论。
      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多