IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色

Posted

技术标签:

【中文标题】IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色【英文标题】:UISegmentedControl Buggy Tint Color in IOS 7.1 【发布时间】: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 正是我所需要的,它完美地工作。 添加了答案。谢谢 【参考方案1】:

如 cmets 中所述,使用 [[UILabel appearanceWhenContainedIn:[UISegmentedControl class], nil] setTextColor:[UIColor blueColor]]; 设置包含在段控件中的内部标签的外观。

【讨论】:

【参考方案2】:

根据 Apple 文档:iOS 7 不支持使用外观代理 API 设置 tintColor 属性。

iOS 7 UI Transition Guide

您还可以使用 setTitleTextAttributes:forState 指定文本属性,如 UISegmentedControl 之类的字体。

【讨论】:

以上是关于IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 7.1 中的 iOS 10 推送通知

IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色

iOS 7.1 和 iOS 8 中的 viewDidAppear 之间是不是存在会影响设置变量的区别?

初始屏幕显示完美适用于 ios 7.1 但不适用于 iPad 中的 ios 6.1

在自定义单元格中调整 iOS 7.1 中的 UILabel 大小

ios 7.1 模拟器中的照片应用程序无法正常工作