【问题标题】:Skip layouSubviews for hidden views跳过隐藏视图的layouSubviews
【发布时间】:2014-11-21 15:28:13
【问题描述】:

由于我正在开发一个应用程序的设计师,我不得不将很多东西塞进一个视图控制器中。我想我会通过跳过调用来减轻一些 CPU 压力并节省一些时间

[super layoutSubviews];

在隐藏视图上(并且是视图s我的意思是 UIView 的一个子类,它包含所有其他内容)并且仅在视图出现之前刷新它。如果这对你们中的某些人很重要,我会通过设置 BOOL 标志来做到这一点。这在 iOS8 上运行良好,但在 iOS7 上崩溃了应用程序:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. XXX's implementation of -layoutSubviews needs to call super.'

那么如何在 iOS7 上跳过调用 layoutSubviews 呢?

当然,有可能我完全不了解 iOS 的工作原理,跳过此调用不会节省任何时间,因为它无论如何都会计算约束。在这种情况下,问题将是“如何跳过计算隐藏视图的约束?”。

【问题讨论】:

    标签: ios objective-c autolayout


    【解决方案1】:

    如果您放弃了对 iOS 7 的支持,iOS 8 添加了通过 active 属性禁用和启用约束的功能。但是如果您需要支持 iOS 7,您唯一的选择是从视图层次结构中删除视图和/或约束,并在您再次需要它们时恢复它们。

    但是你确定-layoutSubviews 会导致速度变慢吗?在尝试优化之前,您应该在 Instruments 中运行 Time Profiler 之类的东西,以确保确实是问题所在。

    【讨论】:

    • 很遗憾,我需要支持iOS7。嗯,它现在并没有导致速度变慢,但它仍处于开发的早期阶段,将会有更多的东西,我知道自动布局会随着更多的东西布局而变慢。也许我只是偏执和太急切,但是当系统浪费一些时间计算不必要的事情时,它只会让我感到不适:P一周。
    猜你喜欢
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多