3

我在视图上有一个 UIButton 的子类。在 iOS 6、5 等中运行良好。但在 iOS 7 中,当我尝试更改标题(使用 setTitle:forState:) 时,我注意到延迟。我已经追踪到基金会不断在我的控件上调用 layoutSubviews 的事实,这导致 CPU 使用率在应用程序的生命周期内徘徊在 100% 左右。

在我的子类中,我覆盖了 layoutSubviews 并添加了一个断点来诊断问题。回溯仅显示从基础中的 [UIView layoutSublayersOfLayer] 方法调用的方法。

请注意,如果我注释掉这一行:

[super layoutSubviews];

CPU 问题消失了,但当然会出现其他问题。

有人见过这个吗?为什么 iOS 7 不断调用 layoutSubviews?

4

1 回答 1

5

发现了问题。在我的 setEnabled: 方法(首先是子类的部分原因)中,我有以下行:

self.titleLabel.alpha = enabled ? 1.0 : 0.8;

显然在 iOS 7 中,这会导致 UIButton 开始一个它永远不会完成的标题更改动画。结果是一个无限循环,其中 layoutSubviews 被重复调用。

修复是在 titleColor 更改时包含此行:

[self setTitleColor:[[self titleColorForState:UIControlStateNormal] colorWithAlphaComponent:0.8] forState:UIControlStateDisabled];

并且避免了无限循环!

于 2013-09-24T21:43:50.420 回答