Swift - 添加一个覆盖现有导航栏的导航栏

时间:2017-02-21 11:38:00

标签: swift uinavigationcontroller

我在一个NavigationController中嵌入了多个VC。 我有一个VC,让我们把它命名为VCNotTransparent,我希望条形图不透明,而在其他VC上我希望它是透明的。 因此,在主VC中,我添加了这些行以使条形透明:

        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.isTranslucent = true

所以现在我的所有酒吧在应用程序中都是透明的。 如果VCNotTransparent不改变所有其他VC,它怎么能不透明?我想到的一个解决方案是仅在VCNotTransparent中添加一个新的导航栏,但我不知道该怎么做。

修改

我也尝试在自己的NavigationController中嵌入VCNotTransparent,它几乎可以工作,但问题是我从它导航到其他一些VC并且它们也变得不透明,因为它们是子导航VCNotTransparent。

1 个答案:

答案 0 :(得分:1)

通过枚举处理 -

在您的MainVC中进行以下操作 -

public enum NavigationType: Int {
case transparent = 1
case notTransparent = 2
}

var currentNavigationType: NavigationType?

 override func viewDidLoad() {
    super.viewDidLoad()
    self.currentNavigationType = .transparent // default
    self.setupNavigationControllerStyle()
}

func setupNavigationControllerStyle (){
switch self.currentNavigationType! {
    case .transparent:
        //do code here for transparent
    case .notTransparent:
         //do code here for not transparent
    default:
        break
    }

}

默认会显示透明条。在哪个控制器中你不想透明条只是从那里更新currentNavigationType属性,如下所示 -

class VCNotTransparent: MainVC {

 override func viewWillAppear(_ animated: Bool) {
    self.currentNavigationType = .notTransparent
    super.viewWillAppear(animated)

   }
}