Ios swift:更改导航栏的颜色
我使用的是带有红色导航栏的Ios swift:更改导航栏的颜色,ios,swift,uinavigationcontroller,uinavigationbar,Ios,Swift,Uinavigationcontroller,Uinavigationbar,我使用的是带有红色导航栏的FirstViewController。当我转到下一个SecondViewController时,我使用此代码清除导航栏颜色: self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 但当我返回到FirstViewController时,我的导航栏颜色不是红色。这是清楚的。但它应该是红色的。如何修复它 第一视图控制器中的代码: override func
FirstViewController
。当我转到下一个SecondViewController
时,我使用此代码清除导航栏颜色:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
但当我返回到FirstViewController
时,我的导航栏颜色不是红色。这是清楚的。但它应该是红色的。如何修复它
第一视图控制器中的代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.barTintColor = UIColor(red: 239/255, green: 210/255, blue: 166/255, alpha: 1.0)
}
将导航栏的颜色设置为
FirstViewController
内viewwillbeen
方法。编辑您的问题。不清楚您希望导航栏是清晰的还是红色的。但是,您可以将其放入
AppDelegate
:
let mainVC = MainViewController()
let navigationController = UINavigationController(rootViewController: mainVC)
navigationController.navigationBar.barTintColor = .clear// or .red
使用
来更改导航栏的颜色,而不是barTintColor
在第一个VC中
class FirstVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = .red //here...
}
}
class SecondVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.backgroundColor = .clear //here...
}
}
在第二个VC中
class FirstVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationItem.largeTitleDisplayMode = .always
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = .red //here...
}
}
class SecondVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.backgroundColor = .clear //here...
}
}
已经有了。但这没有帮助。在我的问题中添加来自FirstViewController
的代码。我不知道我要说什么,但我想问题是因为“preferslargetiles”和“largeTitleDisplayMode”。临时注释这两行代码,你看它会工作得很好!!我写得很清楚。在FirstViewController
红色中。在SecondViewController
中清除颜色。好的,然后将标题从swift:将导航栏的颜色更改为清除到swift:更改导航栏的颜色
:),但您的代码没有帮助。如果我使用navigationController.navigationBar.barTintColor=.clear
我会在导航栏中看到半透明的黑色背景。好的,也尝试添加此行:navigationController.navigationBar.isTranslucent=true
出现问题。。。在FirstViewController
中,它是一个TableViewController,我需要在大模式下清除navbar
,但如果我向下滚动我的tableView,我需要导航栏显示红色。这不适用于需要添加代码以基于滚动管理颜色的navigationBar.backgroundColor
。仅仅添加barTintColor或backgroundColor并不能解决问题。我不知道为什么,但如果我在问题中使用代码,它就是这样工作的。没有用于滚动行为的附加代码。你能告诉我在哪里添加或滚动代码吗?可能已经有类似的问题和答案了?您需要在FirstVC
中实现scrollViewDidScroll(:)
方法。在这种情况下,确定滚动方向,然后根据滚动方向更改导航栏的颜色。小说明。您确定“SecondVC”中的导航栏是透明的,不是白色的吗?因为在我的应用程序中,我使用图像作为背景,如果我编写这个navigationBar.backgroundColor/tintColor/tintBackgroundColor.clear
,那么我只会在navbar
区域中得到一个黑色