【问题标题】:Swift - Adding a navigation bar that overrides the existing oneSwift - 添加一个覆盖现有导航栏的导航栏
【发布时间】:2017-02-21 11:38:00
【问题描述】:

我在一个 NavigationController 中嵌入了多个 VC。 我有一个 VC,我们将其命名为 VCNotTransparent,我希望栏不透明,而在其他 VC 上,我希望它是透明的。 所以在主 VC 中,我添加了这些行来使栏透明:

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

所以现在我的所有条形图在应用程序中都是透明的。 如何在不更改所有其他 VC 的情况下使 VCNotTransparent 不透明?我想到的一个解决方案是只在 VCNotTransparent 中添加一个新的导航栏,但我不知道该怎么做。

编辑

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

【问题讨论】:

    标签: swift uinavigationcontroller


    【解决方案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)
    
       }
    }
    

    【讨论】:

    • 谢谢,这看起来是一个很好的解决方案,我很感激。我缺少标记为已接受的一件事是,我不明白什么是不透明的代码(在 func setupNav... 内)。由于我使用空图像使背景透明,我不确定如何将其恢复为不透明。
    • 试试这个可能对你有帮助 - stackoverflow.com/questions/42332547/…
    • 谢谢,它有一点帮助,但它有一个问题,当从不透明返回到透明条时,条只会在延迟中变得透明(即使我将更改放在正确的函数中vc生命周期)
    • 这个解决方案在视图之间移动时基本上会产生很多奇怪的东西
    • 你给的链接,我试过了,但是当用那里的解决方案设置 viewWillAppear/viewWillDisappear 时,使栏变黑一秒钟,这很难看,有时在查看后需要一秒钟似乎更新为透明..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多