仅在一个 ViewController 中更改导航栏属性
Posted
技术标签:
【中文标题】仅在一个 ViewController 中更改导航栏属性【英文标题】:Change Navigation Bar Attributes in Only One ViewController 【发布时间】:2017-06-21 16:36:55 【问题描述】:我在AppDelegate
中设置了应用程序的导航栏。
在我的ViewController's
之一中,我试图以不同的方式设置属性 - 但是当我找到其他 VC 时,它们仍然有效。
实现这个的正确方法是什么?
AppDelegate.swift
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "MuseoSans-500", size: 19)!,
NSForegroundColorAttributeName: UIColor.white
]
UINavigationBar.appearance().tintColor = UIColor.white
SharkViewController.swift
// MARK: - View Did Load
override func viewDidLoad()
super.viewDidLoad()
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "MuseoSans-500", size: 19)!,
NSForegroundColorAttributeName: UIColor.black
]
【问题讨论】:
【参考方案1】:在你的viewWillAppear
:
UINavigationBar.appearance().titleTextAttributes = [
NSFontAttributeName: UIFont(name: "MuseoSans-500", size: 19)!,
NSForegroundColorAttributeName: UIColor.black
]
然后当您离开视图时,在您的 viewWillDisappear
中,您只需重置原始值。
【讨论】:
【参考方案2】:最好的办法是改变你的viewController的navigationItem
的外观:
let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [.font: UIFont(name: "MuseoSans-500", size: 19)!]
navigationItem.standardAppearance = appearance
这只会更改您的 viewController 外观,您可以在 viewDidLoad
或 viewWillAppear
中执行此操作。
【讨论】:
【参考方案3】:您也可以在viewDidLoad:
或viewWillAppear
上使用以下代码:
self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "MuseoSans-500", size: 19)!,
NSForegroundColorAttributeName: UIColor.black]
【讨论】:
viewDidLoad:
是不够的,因为它不会在用户下次导航到该视图控制器时被调用,例如通过后退按钮或展开 segue。以上是关于仅在一个 ViewController 中更改导航栏属性的主要内容,如果未能解决你的问题,请参考以下文章
仅限iOS 10:在viewbarcontroller中隐藏在tabbar后面的Viewcontroller
iOS ViewController 在方向更改后无法正确布局