Swift 如何撤销iOS 11中的透明导航栏?
我正在尝试在iOS 11中创建一个透明的导航栏 我将下面的代码放在VC中,这是可行的,但是当另一个VC被推到上面时,它保持透明 (我原以为再次将backgroundImage设置为零会起作用,但事实并非如此。) 推送新VC时,如何获得白色背景Swift 如何撤销iOS 11中的透明导航栏?,swift,uinavigationcontroller,uinavigationbar,Swift,Uinavigationcontroller,Uinavigationbar,我正在尝试在iOS 11中创建一个透明的导航栏 我将下面的代码放在VC中,这是可行的,但是当另一个VC被推到上面时,它保持透明 (我原以为再次将backgroundImage设置为零会起作用,但事实并非如此。) 推送新VC时,如何获得白色背景 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
}
您可以添加扩展以简化与UINavigationBar的交互
extension UINavigationBar {
func makeTransparent() {
self.setBackgroundImage(UIImage(), for: .default)
self.shadowImage = UIImage()
self.isTranslucent = true
}
func undoTransparency() {
self.setBackgroundImage(nil, for: .default)
}
func makeLargeAndTransparent() {
makeTransparent()
self.prefersLargeTitles = true
self.backgroundColor = .clear
self.barTintColor = *barTintColor*
self.tintColor = *tintColor*
self.largeTitleTextAttributes = [
.font: *font.of(size: 34)*,
.foregroundColor: *foregroundColor*
]
self.titleTextAttributes = [
.font: *font.of(size: 17)*,
.foregroundColor: *foregroundColor*
]
}
func makeDefault() {
undoTransparency()
self.prefersLargeTitles = false
self.barTintColor = *barTintColor*
self.tintColor = *tintColor*
self.titleTextAttributes = [
.font: *font.of(size: 17)*,
.foregroundColor: *foregroundColor*
]
}
}