Как переключаться между прозрачным UINavigationBar и UINavigationBar с backgroundColor - PullRequest
0 голосов
/ 19 марта 2019

У меня есть несколько UIViewControllers, которые имеют сплошной фоновый цвет. Однако в профиле пользователя я хочу показать размытое изображение профиля на фоне, поэтому мне нужен прозрачный UINavigationBar. Это прекрасно работает. Я делаю это следующим образом:

Все мои UIViewControllers имеют прозрачный UINavigationBar, например:

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

Затем я просто добавляю "фальшивую" полосу, просто создав прямоугольник UIView и закрепив все ребра там, где должен быть UINavigationBar, в результате получится такой же внешний вид, но позволяющий сделать страницы профиля прозрачными. Тем не менее, теперь у меня есть ситуация, когда мне нужно использовать «реальный» UINavigationBar, потому что в моем текущем подходе, когда я показываю клавиатуру и анимируем view.frame.origin.y, чтобы заставить экран двигаться вверх, он «над» подделкой UINavigationBar.

Для этого я установил свойство barTintColor UINavigationBar в этом контроллере представления. Проблема возникает, когда я сначала захожу в это представление, а затем на страницу профиля: он остается тем же сплошным цветом. Проблема не возникает, когда я сразу после запуска перехожу на страницу профиля.

Это желаемый результат, который я вижу, когда перехожу прямо на страницу профиля.

Так выглядит обычный viewController с «поддельной» UINavigationBar

И это ошибка. Это происходит, когда я впервые захожу в viewController с установленным barTintColor, а затем на страницу профиля

Какие-нибудь советы, как мне это исправить? Я попытался "сбросить" свойства UINavigationBar в viewWillDisappear viewController с набором barTintColor, но это не сработало:

override func viewWillDisappear(_ animated: Bool) {

    super.viewWillDisappear(animated)
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = true
        navigationController?.navigationBar.barTintColor = nil

}

Может быть полезно: большую часть времени я использую переходы толчков (определенно между соответствующими viewControllers). Используйте только подарок, чтобы показать всплывающие окна или аналогичные. Все в коде - без раскадровок.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 20 марта 2019

Вы можете использовать Present вместо Push.Таким образом, вы можете использовать две разные навигационные панели.

...