Как правильно установить оттенок стрелки кнопки назад в ios 13? - PullRequest
7 голосов
/ 30 сентября 2019

В ios 13 Apple представила новый прокси-объект UINavigationBarAppearance для установки внешнего вида панели навигации. Я был в состоянии установить почти все, что мне нужно, кроме одной маленькой вещи. Стрелка кнопки «Назад» всегда отображается с синим оттенком, и я не знаю, как установить желаемый цвет. Я использую старый [[UINavigationBar appearance] setTintColor:] способ, но я думаю, что должен быть какой-то способ сделать это с помощью API объектов UINavigationBarAppearance. У кого-нибудь есть идеи как?

Ответы [ 2 ]

3 голосов
/ 02 октября 2019

В моем приложении настроен пользовательский контроллер навигации, который изменяет 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:)

0 голосов
/ 14 октября 2019

Новый способ установки цвета кнопки возврата внешнего вида (прокси) будет:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...