dkm*_*kmp 3 iphone objective-c uibutton ipad ios7
我在视图上有一个 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;
Run Code Online (Sandbox Code Playgroud)
显然在 iOS 7 中,这会导致 UIButton 开始一个它永远不会完成的标题更改动画。结果是一个无限循环,其中 layoutSubviews 被重复调用。
修复是在更改 titleColor 时包含此行:
[self setTitleColor:[[self titleColorForState:UIControlStateNormal] colorWithAlphaComponent:0.8] forState:UIControlStateDisabled];
Run Code Online (Sandbox Code Playgroud)
并且避免了无限循环!
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |