我的应用程序中有几个视图控制器,它们应该具有透明的导航栏。由于这些视图控制器的数量可以动态变化,因此我将原始的UINavigationBar
细分为自己的GDSNavigationBar
。它具有UINavgiationController
的扩展名,可以从任何视图控制器访问此自定义导航栏,并且具有更改外观的功能。但是,当我尝试更改外观时,导航栏会发疯。
这是我的自定义导航栏:
enum GDSNavigationBarStyle {
case whiteOpaque
case transparent
case transparentWithTitle
}
class GDSNavigationBar: UINavigationBar {
public var customBarStyle: GDSNavigationBarStyle {get {return aCustomBarStyle}}
private var aCustomBarStyle: GDSNavigationBarStyle = .whiteOpaque
public func setCustomBarStyle(_ style: GDSNavigationBarStyle) {
if style == aCustomBarStyle {return}
switch style {
case .whiteOpaque:
setWhiteOpaqueStyle()
break
case .transparent:
setTransparentStyle()
break
case .transparentWithTitle:
setTransparentWithTitleStyle()
break
}
}
private func setWhiteOpaqueStyle() {
barStyle = .default
barTintColor = UIColor.white
backgroundColor = UIColor.white
tintColor = UIApplication.shared.keyWindow?.tintColor
shadowImage = UIImage()
setBackgroundImage(nil, for: .default)
let attributes = [NSAttributedString.Key.foregroundColor : UIColor.black]
titleTextAttributes = attributes
largeTitleTextAttributes = attributes
}
private func setTransparentStyle() {
barStyle = .black
barTintColor = UIColor.clear
backgroundColor = UIColor.clear
tintColor = UIColor.white
shadowImage = UIImage()
setBackgroundImage(UIImage(), for: .default)
let attributes = [NSAttributedString.Key.foregroundColor : UIColor.clear]
titleTextAttributes = attributes
largeTitleTextAttributes = attributes
}
导航栏拒绝更改其样式。套用attributes
后,标题和大标题也会消失。