【发布时间】:2014-05-01 07:41:50
【问题描述】:
似乎呈现和关闭视图控制器都会提示 呈现 视图布局其子视图和/或更新其约束。对于繁重的视图层次结构,这会引入性能问题。再次 - 这是现有的,当前显示的视图。正在创建和显示的模态非常轻便。
无论我是否使用自动布局(如在我的示例项目中),都会发生这种情况。
我已经构建了一个demo project,它与我正在开发的应用程序相似。有一个水平滚动的主父控制器UIScrollView。多个子控制器被添加到父控制器,它们的视图被添加到滚动视图并使用NSLayoutConstraints 排列。每个子视图本身都有一个子视图,一个简单的UIView,也有一个约束。
在导航栏中,有一个用于启动模式的按钮。当出现时,父控制器在每个子视图上多次调用setNeedsLayout。在我的演示项目中,我将覆盖setNeedsLayout 以在访问它时进行记录。关闭模态时也会发生同样的情况。打开和关闭模态几次并观察控制台。
我看不出为什么需要新的布局,而且对于更复杂的视图,我发现有数百个这样的调用正在触发,对性能产生了明显的影响。
注意,当ChildView 中的布局代码被省略时,setNeedsLayout 不会被调用。我鼓励您注释掉约束并查看日志记录中的差异。
为什么会这样?在呈现和关闭模式时如何防止不必要的布局传递?
【问题讨论】:
-
我认为setNeedsLayout是系统调用的,我测试了我的项目,你的情况也是这样。
标签: ios cocoa-touch uiview uiviewcontroller autolayout