Как правильно настроить оттенок стрелки кнопки возврата в ios 13
В iOS 13 Apple представила новый прокси-объект UINavigationBarAppearance для настройки внешнего вида панели навигации. Я смог установить почти все, что мне было нужно, кроме одной мелочи. Стрелка кнопки "Назад" всегда отображается с голубым оттенком, и я не знаю, как установить для нее нужный мне цвет. Я использую старую[[UINavigationBar appearance] setTintColor:]
способ, но я думаю, что должен быть какой-то способ сделать это с помощью API объектов UINavigationBarAppearance. Кто-нибудь знает, как?
2 ответа
Новый способ установки цвета кнопки возврата для внешнего вида (прокси):
let appearance = UINavigationBarAppearance()
// Apply the configuration option of your choice
appearance.configureWithTransparentBackground()
// Create button appearance, with the custom color
let buttonAppearance = UIBarButtonItemAppearance(style: .plain)
buttonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.white]
// Apply button appearance
appearance.buttonAppearance = buttonAppearance
// Apply tint to the back arrow "chevron"
UINavigationBar.appearance().tintColor = UIColor.whiteI
// Apply proxy
UINavigationBar.appearance().standardAppearance = appearance
// Perhaps you'd want to set these as well depending on your design:
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
В моем приложении есть настраиваемый контроллер навигации, который изменяет navigationBar
s titleTextAttributes
, tintColor
и другие в зависимости от разных сценариев.
Запуск приложения на iOS 13 backBarButtonItem
По умолчанию стрелка имела синий оттенок. Отладчик представления показал, что толькоUIBarButtonItem
s UIImageView
имел этот синий оттенок.
В итоге я установил navigationBar.tintColor
дважды, чтобы он изменил цвет...
public class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
public var preferredNavigationBarTintColor: UIColor?
override public func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
// if you want to change color, you have to set it twice
viewController.navigationController?.navigationBar.tintColor = .none
viewController.navigationController?.navigationBar.tintColor = preferredNavigationBarTintColor ?? .white
// following line removes the text from back button
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Самым странным при поиске решения был непоследовательный результат, который заставляет меня думать, что он связан с просмотром жизненного цикла и / или анимации внешнего вида или кеша Xcode:)