Кнопки назад на панели навигации перекрываются, swift 4 - PullRequest
0 голосов
/ 03 октября 2018

Я пытался настроить кнопку возврата в соответствии с этим учебным пособием.В AppDelegate,

let barButtonAppearence = UIBarButtonItem.appearance()

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    let backButton = UIImage(named: "back_arrow")
    let backButtonImage = backButton?.stretchableImage(withLeftCapWidth: 0, topCapHeight: 10)
    barButtonAppearence.setBackButtonBackgroundImage(backButtonImage, for: .normal, barMetrics: .default)
    return true
}

А затем он конфликтует с существующим (который появился автоматически из-за segue (Показать).

enter image description here

Так что мне нужно удалить синий.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Другое альтернативное решение для настройки прозрачного оттенка.Смотрите ниже-модифицированный код вашего.

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    let backButton = UIImage(named: "back_arrow")
    let backButtonImage = backButton?.stretchableImage(withLeftCapWidth: 0, topCapHeight: 10)
    barButtonAppearence.setBackButtonBackgroundImage(backButtonImage, for: .normal, barMetrics: .default)
 barButtonAppearence.tintColor = UIColor.clear
    return true

}

0 голосов
/ 03 октября 2018

Есть две вещи, необходимые для достижения того, чего вы пытаетесь достичь:

  • Изменение изображения по умолчанию кнопки «Назад» на предоставленное изображение
  • Удаление заголовка из элемента кнопки «Назад»

Чтобы изменить изображение кнопки «Назад»:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Remember, this will change every navigation bar's back button image in your app
    UINavigationBar.appearance().backIndicatorImage = #imageLiteral(resourceName: "backButton")
    UINavigationBar.appearance().backIndicatorTransitionMaskImage = #imageLiteral(resourceName: "backButton")
    return true
}

Примечание. Если вы не хотите, чтобы на кнопке «Назад» на всей панели навигации отображалось изображение, возможно, вам потребуется создать подклассUINavigationController и обновите его панель навигации.

Удаление заголовка из элемента кнопки «Назад»:

Мы сделаем это, добавив метод к любому UIViewController сквозному расширению.Здесь будет использоваться метод расширения, чтобы любой UIViewController мог иметь такое поведение, когда захочет.

extension UIViewController {
    func removeNavigationBarBackButtonItemTitle() {
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: nil, action: nil)
    }
}

Теперь в любом push-переходе для VC A -> VC B вам нужно скрыть название кнопки «Назад».Но вы должны вызвать метод removeNavigationBarBackButtonItemTitle() из VC A .Просто запомните это, и вы готовы идти.

class ViewControllerA: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        removeNavigationBarBackButtonItemTitle()
    }
}

Здесь вы найдете демо .Демо также имеет некоторые другие реализации.Но вы получите то, что вам нужно, и то, что я сказал выше.

0 голосов
/ 03 октября 2018

Вы пытались заменить его следующим образом:

UINavigationBar.appearance().backIndicatorImage = UIImage(named: "back_arrow")
UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "back_arrow")

Я пробовал это на applicationDidFinishLaunching метод в AppDelegate

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