设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用
Posted
技术标签:
【中文标题】设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用【英文标题】:Set UINavigationBar appearance whenContainedInInstancesOf to my viewcontroller not working 【发布时间】:2017-07-13 02:53:34 【问题描述】:我想在一些视图控制器中设置白色 barTintColor
我已设置UINavigationBar.appearance().barTintColor
对于所有默认颜色,但是当我使用外观 whenContainedInInstancesOf
这不是改变我的视图控制器
UINavigationBar.appearance(whenContainedInInstancesOf: [MyViewController.self]).barTintColor = .white
有什么想法吗?我在我的视图控制器中试过这个
self.navigationcontroller.navigationbar.barTintColor = .white
但是当屏幕消失时,我必须将颜色设置回默认值。我不想那样做。我该怎么办?
【问题讨论】:
appearanceWhenContainedIn in Swift的可能重复 @zombie 我试过这个UINavigationBar.appearance(whenContainedInInstancesOf: [MyViewController.self]).barTintColor = .white
但还是不行!
但它说它只适用于 ios 10 所以你测试的是哪个版本
@zombie 我的设备是 10.1.1。
【参考方案1】:
UINavigationBar
包含在 UINavigationController
而不是 UIViewController
话虽如此,您需要创建一个自定义UINavigationController
一个空的类将完成这项工作
class NavigationController: UINavigationController
那么我们就可以使用它了
UINavigationBar.appearance(whenContainedInInstancesOf: [NavigationController.self]).barTintColor = .white
例子可以在here找到
【讨论】:
我认为这也会改变其他屏幕。哪些屏幕位于第一个屏幕旁边(需要白色导航栏的屏幕)。 如果您的意思是这也会改变UINavigationController
的颜色,那么不会。仅对NavigationController
生效
@Oniikal3 顺便问一下你有没有想过或尝试过?
是的,我试过了。和我想的一样展示。它改变了所有正在流动的屏幕。现在我必须在每个视图控制器中设置它。我不想打击它。感谢您的解决方案:)
@Oniikal3 这很奇怪,我添加了一个例子来看看。如果您仍有问题,请告诉我【参考方案2】:
@zombie 有正确答案。我刚刚在 UISearchBar 上遇到了这个问题。这是答案的 Swift 3 版本。使用.red
作为本示例的示例UIColor
。
let textField = UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
textField.tintColor = .red
let searchBar = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
searchBar.setTitleTextAttributes([NSForegroundColorAttributeName: .red], for: .normal)
searchBar.setTitleTextAttributes([NSForegroundColorAttributeName: .red], for: .disabled)
【讨论】:
【参考方案3】:斯威夫特 4:
// For the cursor color
let textField = UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
textField.tintColor = .lightBlue
// For the cancel button on search bar
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .normal)
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.lightText], for: .disabled)
【讨论】:
【参考方案4】:UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)
这对我有用!
【讨论】:
以上是关于设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观
如何将透明的“大标题”UINavigationBar 重置为默认外观设置?
设置 UINavigationBar 外观 whenContainedInInstancesOf 到我的视图控制器不起作用