Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 仅当显示导航控制器的最顶层页面时,才使UINavigationBar透明?_Ios_Swift_Cocoa Touch - Fatal编程技术网

Ios 仅当显示导航控制器的最顶层页面时,才使UINavigationBar透明?

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

我创建了一个具有完全透明背景的UINavigationController自定义子类,自定义类中包含以下代码:

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
将是您进行检查的相应类名。。 或者创建一个单独的方法,并根据需要调用它