Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Swift 如何撤销iOS 11中的透明导航栏?_Swift_Uinavigationcontroller_Uinavigationbar - Fatal编程技术网

Swift 如何撤销iOS 11中的透明导航栏?

Swift 如何撤销iOS 11中的透明导航栏?,swift,uinavigationcontroller,uinavigationbar,Swift,Uinavigationcontroller,Uinavigationbar,我正在尝试在iOS 11中创建一个透明的导航栏 我将下面的代码放在VC中,这是可行的,但是当另一个VC被推到上面时,它保持透明 (我原以为再次将backgroundImage设置为零会起作用,但事实并非如此。) 推送新VC时,如何获得白色背景 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar

我正在尝试在iOS 11中创建一个透明的导航栏

我将下面的代码放在VC中,这是可行的,但是当另一个VC被推到上面时,它保持透明

(我原以为再次将backgroundImage设置为零会起作用,但事实并非如此。)

推送新VC时,如何获得白色背景

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.prefersLargeTitles = false
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
    self.navigationController?.navigationBar.shadowImage = nil
}

您可以添加扩展以简化与UINavigationBar的交互

extension UINavigationBar {

    func makeTransparent() {
        self.setBackgroundImage(UIImage(), for: .default)
        self.shadowImage = UIImage()
        self.isTranslucent = true
    }

    func undoTransparency() {
        self.setBackgroundImage(nil, for: .default)
    }

    func makeLargeAndTransparent() {
        makeTransparent()

        self.prefersLargeTitles = true
        self.backgroundColor = .clear
        self.barTintColor = *barTintColor*
        self.tintColor = *tintColor*
        self.largeTitleTextAttributes = [
             .font: *font.of(size: 34)*,
             .foregroundColor: *foregroundColor*
        ]

        self.titleTextAttributes = [
             .font: *font.of(size: 17)*,
             .foregroundColor: *foregroundColor*
        ]
    }

    func makeDefault() {
        undoTransparency()

        self.prefersLargeTitles = false

        self.barTintColor = *barTintColor*
        self.tintColor = *tintColor*
        self.titleTextAttributes = [
            .font: *font.of(size: 17)*,
            .foregroundColor: *foregroundColor*
        ]
    }
}