Использовать значок «назад» внешнего вида UINavigationBar для пользовательской кнопки? - PullRequest
0 голосов
/ 03 августа 2020

Мне нужно добиться кнопки «<назад» настраиваемой панели навигации, как показано в переходе pu sh, но в модальном режиме. </p>

введите описание изображения здесь

Я хочу избежать излишнего жесткого кодирования и узнал о свойствах UINavigationBar.appearance().backIndicatorImage и UINavigationBar.appearance().backIndicatorTransitionMaskImage.

Я хочу использовать их, чтобы поместить рядом с ними свой текст для моей кнопки, так как использование .png не выглядит так естественно, как настоящий.

Я пробовал это, но UIImage из этих свойств возвращается как nil.

func addBackButton() {
    let backButton = UIButton(type: .custom)
    backButton.setImage(UINavigationBar.appearance().backIndicatorImage, for: .normal)
    backButton.imageView?.contentMode = .scaleAspectFit
    backButton.setTitle("Back", for: .normal)
    backButton.setTitleColor(backButton.tintColor, for: .normal)
    
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
}

1 Ответ

1 голос
/ 03 августа 2020

UINavigationBar.appearance().backIndicatorImage - необязательное значение, поэтому вы не сможете получить системный шеврон по умолчанию. Вместо этого система будет использовать предоставленное здесь изображение, если оно не равно null, в противном случае вернется к системному значению по умолчанию.

Если вы настроили таргетинг iOS 13+, вы можете использовать символы Apple SF, в частности, значок кнопки «Назад» обозначается как chevron.left. Чтобы воспользоваться этим, позвоните по номеру UIImage(systemName: "chevron.left"). Для более ранних версий iOS вам придется использовать актив набора изображений. Вы можете настроить таргетинг на все версии iOS, используя if #available(iOS 13.0, *) { ... } else { ... }, где вы отображаете системный образ, если он включен iOS 13+, для улучшения внешнего вида пользовательского интерфейса.

func addBackButton() {
    let backButton = UIButton(type: .custom)
    if #available(iOS 13.0, *) {
        backButton.setImage(UIImage(systemName: "chevron.left"), for: .normal)
    }
    else {
        backButton.setImage(UIImage(named: "backChevon"), for: .normal)
    }
    backButton.imageView?.contentMode = .scaleAspectFit
    backButton.setTitle("Back", for: .normal)
    backButton.setTitleColor(backButton.tintColor, for: .normal)
    
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
}
...