Ios 仅当显示导航控制器的最顶层页面时,才使UINavigationBar透明?
我创建了一个具有完全透明背景的UINavigationController自定义子类,自定义类中包含以下代码:Ios 仅当显示导航控制器的最顶层页面时,才使UINavigationBar透明?,ios,swift,cocoa-touch,Ios,Swift,Cocoa Touch,我创建了一个具有完全透明背景的UINavigationController自定义子类,自定义类中包含以下代码: override func viewWillAppear(animated: Bool) { super.viewWillAppear(true) self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationBar.sha
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
}
我想在导航栏的后续屏幕上显示半透明背景,例如在详细视图中的“后退”按钮下方。我已将以下行添加到上述代码中,以创建我想要的外观:
self.navigationBar.backgroundColor = UIColorFromHex(0xFFFFFF, alpha: 0.8)
UIColorFromHex是生成UIColors的辅助函数
func UIColorFromHex(rgbValue:UInt32, alpha:Double=1.0)->UIColor {
let red = CGFloat((rgbValue & 0xFF0000) >> 16)/256.0
let green = CGFloat((rgbValue & 0xFF00) >> 8)/256.0
let blue = CGFloat(rgbValue & 0xFF)/256.0
return UIColor(red:red, green:green, blue:blue, alpha:CGFloat(alpha))
}
到目前为止,我只能使导航栏对于所有屏幕都是透明的,或者对于所有屏幕都是半透明的
当显示导航堆栈中的根屏幕时,有没有办法在透明和半透明之间切换外观?试试这个
if let rootViewController = self.navigationController.viewControllers[0] as? YourClassName {
//Code for transparent bar
} else {
//Code for simple bar
}
在每个类的VIEWWILLEXPEND方法中尝试此方法,其中,YourClassName
将是您进行检查的相应类名。。
或者创建一个单独的方法,并根据需要调用它