【发布时间】:2014-04-01 17:59:42
【问题描述】:
当使用 Appearance API 设置 UISegmentedControl 的 tint 颜色时,每个未选中段中的文本颜色仅在切换选项卡后才采用 UILabel 的颜色。
一个测试这个的示例程序(下面的屏幕截图):
- 加载程序并查看第一个选项卡。一切正常,标签为红色,分段为蓝色。
- 切换到第二个选项卡,一切正常。
- 切换回第一个选项卡,您会看到段已变为红色,而不是应有的蓝色。
应用刚刚加载,一切正常:
切换标签后颜色不对:
代码负责(在应用程序委托中进行测试,但发生在其他地方):
[[UILabel appearance] setTextColor:[UIColor redColor]];
[[UISegmentedControl appearance] setTintColor:[UIColor blueColor]];
我已在错误报告中将此信息发送给 Apple。他们要求提供一个示例项目,但我还没有得到答案。这仅显示在 IOS 7.1 上。在 7.0 上,这不会发生。
是否有任何可以解决此问题的建议或临时修复?即使我不认为这是我的错,它也会让我的应用看起来很糟糕(红色只是为了测试,这会让任何人的应用看起来很糟糕)。我已经尝试通过设置特定控件的色调而不是使用外观 API 来手动设置控件,但问题仍然存在。
【问题讨论】:
-
我在
UISearchBar中解决类似问题的方法是动态地从其内部子视图层次结构中进行子类化(最佳输入:didAddSubview:)。骇人听闻,但是是的…… -
尝试在调试器中输入
[self.segmentControl recursiveDescription],然后发布输出。试试[[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil setTextColor:[UIColor blueColor]]; -
谢谢利奥! appearanceWhenContainedIn 正是我所需要的,它完美地工作。
-
添加了答案。谢谢
标签: objective-c uisegmentedcontrol uiappearance tintcolor