我在视图上有一个 UIButton 的子类。在 iOS 6、5 等中运行良好。但在 iOS 7 中,当我尝试更改标题(使用 setTitle:forState:)时,我注意到延迟。我已经追踪到这个问题,因为基础不断地在我的控件上调用layoutSubviews,这导致CPU使用率在应用程序的生命周期内徘徊在100%左右。
在我的子类中,我覆盖了layoutSubviews并添加了一个断点来诊断问题。回溯仅显示从基础中的 [UIView layoutSublayersOfLayer] 方法调用的方法。
请注意,如果我注释掉这一行:
[super layoutSubviews];
CPU 问题消失了,但当然还会出现其他问题。
有人见过这个吗?为什么iOS 7不断调用layoutSubviews?
发现问题了。在我的 setEnabled: 方法(首先是子类的部分原因)中,我有以下行:
self.titleLabel.alpha = enabled ? 1.0 : 0.8;
显然在 iOS 7 中,这会导致 UIButton 开始一个永远不会完成的标题更改动画。结果是一个无限循环,其中重复调用layoutSubviews。
修复方法是在更改 titleColor 时包含此行:
[self setTitleColor:[[self titleColorForState:UIControlStateNormal] colorWithAlphaComponent:0.8] forState:UIControlStateDisabled];
并且避免了无限循环!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)