У меня есть несколько 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). Используйте только подарок, чтобы показать всплывающие окна или аналогичные. Все в коде - без раскадровок.
Любая помощь будет принята с благодарностью!