Как отменить прозрачную панель навигации в iOS 11? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь создать прозрачную панель навигации в iOS 11.

Я помещаю следующий код в VC, который работает, но он остается прозрачным, когда другой VC помещается сверху.

(я думал, что установка backgroundImage к nil снова будет работать, но это не так.)

Как получить белый фон при нажатии на новый ВК?

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
}

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете добавить расширение, чтобы упростить взаимодействие с 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*
        ]
    }
}
...