swift - 更改 UINavigationbar 中元素的色调颜色(iOS 11)

标签 swift uibutton uinavigationbar uibarbuttonitem ios11

我一直在使用这段代码来改变导航栏中元素的色调:

UINavigationBar.appearance().tintColor = theme.labelColor

但是,这在 iOS 11 中不再有效。在 iOS 11 之前,导航栏中的按钮是 UINavigationButton,但在 iOS 11 中它们已更改为 _UIModernBarButton。我可以使用 UIButton.appearance().tintcolor 更改它们的色调,但这会改变每个按钮的颜色。

这是一个比较:

iOS 10 Vs. 11 UINavigationBar button 任何人都知道如何更改导航栏中的按钮色调颜色?

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/

相关文章:

uibutton - 长按并点击多个 UIButton 的识别器

html - 导航栏在更高的缩放比例下不是内联的

ios - uistackview "jumps"中安排的 subview 内的动画

ios - 如何在 ui 搜索栏中的 x 按钮操作事件上 resignfirstResponder?

ios - UIWebView 没有加载新的 url

ios - 将表格 View 单元格中收藏夹按钮的状态保存在 NSUserDefaults 中

ios - Swift:设置数组的一个值会同时更改其他值

iphone - 界面生成器 UIButton 自定义背景图像不适用于模拟器/设备

ios - NavigationBar 没有完全隐藏

iphone - 如何将UINavigationBar子类化以与Three20/iOS5一起使用?