Заголовок кнопки UINavigationBar Back нельзя удалить, используя внешний вид панели навигации для iOS 13 - PullRequest
1 голос
/ 26 сентября 2019

В моем приложении я хочу удалить заголовок UINavigationBar Back Button.Я сделал следующие коды

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
     // do other staffs 
     initNavigationBar()

     return true 

}

private func initNavigationBar() {

        let appearance = UINavigationBar.appearance()
        appearance.barTintColor = GLOBAL_TINT_COLOR // a globally declared colour 
        appearance.tintColor = .white
        appearance.barStyle = .black

        if #available(iOS 13.0, *) {
            let backButtonAppearance = UIBarButtonItemAppearance()
            backButtonAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.clear]
            appearance.standardAppearance.backButtonAppearance = backButtonAppearance
            appearance.compactAppearance?.backButtonAppearance = backButtonAppearance
            appearance.scrollEdgeAppearance?.backButtonAppearance = backButtonAppearance
        } else {


            // Hide navigation bar back button items

            UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal)

            UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .highlighted)
        }

}

Однако этот код всегда работает для iOS 10-12, но не работает для iOS 13.Я что-то упустил?

В других случаях я нашел много ответов по теме, но не нашел решения для iOS 13

, который я никогда не хочу использовать для set back button title as an empty string, а неисправить это с помощью внешнего вида.

Спасибо

1 Ответ

1 голос
/ 26 сентября 2019

У меня была похожая проблема несколько недель назад.Я не нашел способа сделать это глобально для всего приложения, поэтому я прибегнул к настройке каждого контроллера навигации (которых, к счастью, было немного).

Я сделал что-то подобное, расширив UINavigationController:

@available(iOS 13, *)
func hideBackButton() {
    let appearance = self.navigationBar.standardAppearance

    let hideBackButtonTitleAttributes: [NSAttributedString.Key: Any] = [
        .foregroundColor: UIColor.clear
    ]

    let normalBackButton = appearance.backButtonAppearance.normal
    let highlightedBackButton = appearance.backButtonAppearance.highlighted

    normalBackButton.titleTextAttributes = hideBackButtonTitleAttributes
    highlightedBackButton.titleTextAttributes = hideBackButtonTitleAttributes

    navigationBar.standardAppearance = appearance
}

Затем я использовал метод hideBackButton следующим образом:

navigationController?.hideBackButton()

Если есть лучший способ сделать это для всего приложения, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...