我一直在使用这段代码来改变导航栏中元素的色调:
UINavigationBar.appearance().tintColor = theme.labelColor
但是,这在 iOS 11 中不再有效。在 iOS 11 之前,导航栏中的按钮是 UINavigationButton
,但在 iOS 11 中它们已更改为 _UIModernBarButton
。我可以使用 UIButton.appearance().tintcolor
更改它们的色调,但这会改变每个按钮的颜色。
这是一个比较:
2017 年 1 月 9 日更新:
看起来 _UIButtonBarButton
具有正确的色调,但 _UIModernBarButton
将其覆盖为 UIButton
设置的颜色。
2017 年 9 月 18 日更新:
“工程部门就此问题提供了以下反馈:
UIView.tintColor 不是外观选择器,具体记录为由于其继承属性而无法作为外观属性正常工作。”
最佳答案
所以我确实找到了一种解决方案。我通过 UIButton 的外观代理设置色调颜色,但仅当包含在 UINavigationBar 中时。这看起来对我有用。但是仍然希望这种行为会在 iOS 11 GM 中改变,或者有人可以提出更好的解决方案。这是我的工作代码:
if([UIButton respondsToSelector:@selector(appearanceWhenContainedInInstancesOfClasses:)]) {
[[UIButton appearanceWhenContainedInInstancesOfClasses:@[UINavigationBar.class]]setTintColor:navTintColor];
}
外观代理调用的Swift版本:
UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = UIColor.red
关于swift - 更改 UINavigationbar 中元素的色调颜色(iOS 11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893605/