UIBarButtonItem setBackButtonTitlePositionAdjustment не работает - PullRequest
2 голосов
/ 23 января 2020

Обновлено

Я хочу изменить смещение между стрелкой и текстом в кнопке «Назад» на панели навигации. Он работает просто отлично, пока я не установлю

UINavigationBar.appearance().standardAppearance = newAppearance

Вот полный код:

        let appearance = UINavigationBar.appearance()
        let standardAppearance = UINavigationBarAppearance()
        standardAppearance.configureWithOpaqueBackground()
        standardAppearance.backgroundColor = someColor
        standardAppearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor]
        standardAppearance.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor]
        standardAppearance.shadowColor = navigationShadowColor

        // if remove theses 2 line, offset code works!!!
        appearance.standardAppearance = standardAppearance
        appearance.scrollEdgeAppearance = standardAppearance

        // code to set offset
        UIBarButtonItem
            .appearance()
            .setBackButtonTitlePositionAdjustment(
                UIOffset(horizontal: -20, vertical: 0),
                for: .default)

Ответы [ 3 ]

1 голос
/ 28 января 2020

Вам нужно установить TitlePositionAdjustment в методе делегата приложения "didFinishLaunchingWithOptions", тогда это будет работать.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    UIBarButtonItem
    .appearance()
    .setBackButtonTitlePositionAdjustment(
        UIOffset(horizontal: -20, vertical: 0),
        for: .default)
    return true
}
1 голос
/ 29 января 2020

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

...
standardAppearance.backButtonAppearance.normal.titlePositionAdjustment = 
    UIOffset(horizontal: -20, vertical: 0)

appearance.standardAppearance = standardAppearance
...

, чтобы часть UIBarButtonItem.appearance() не требовалась - просто удалите он

0 голосов
/ 27 января 2020

Это мой код для пользовательской кнопки возврата

func addBackButton() {
    let backButtonView = UIView(frame: CGRect(x: 0, y: 0, width: 70, height: 44))
    let imageView = UIImageView(image: UIImage(named: "back-arrow"))
    imageView.frame = CGRect(x: -5, y: 11, width: 12, height: 22)
    imageView.image = imageView.image!.withRenderingMode(.alwaysTemplate)
    imageView.tintColor = .fiGreen()
    let label = UILabel(frame: CGRect(x: 10, y: 0, width: 60, height: 44))
    label.textColor = .fiGreen()
    label.text = NSLocalizedString("back", comment: "Back")
    backButtonView.addSubview(imageView)
    backButtonView.addSubview(label)
    backButtonView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(backButtonClicked)))
    let barButton = UIBarButtonItem(customView: backButtonView)
    navigationItem.leftBarButtonItem = barButton
}    

Я думаю, вы можете изменить ее, чтобы получить необходимое смещение.

...