Я добавил UIBarButtonItem к self.navigationItem.leftBarButtonItem, когда мое приложение работает в конфигурации устройства RTL, и self.navigationItem.rightBarButtonItem при настройке устройства LTR. В обеих добавленных конфигурациях UIBarButtonItem закрывает кнопку "Назад", которая является кнопкой по умолчанию.

Вот мой код:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: CGFloat(150), height: CGFloat(20)))
    label.backgroundColor = UIColor.clear
    label.font = UIFont.systemFont(ofSize: 18.0)
    label.shadowColor = UIColor(white: 0.0, alpha:0.5)
    label.textAlignment = NSTextAlignment.center
    label.textColor = UIColor(hexaValue: ConsColors.albums)
    label.text = "Just text"
    label.sizeToFit()
    if UIApplication.shared.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirection.rightToLeft{
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: label)
    }else{
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label)
    }

Я даже пробовал с нормальной системой UIBarButtonItem. Также попытался установить силу семантического атрибута содержимого UINavigationcontroller RightToLeft или LefttoRight, что не работает.

UINavigationBar.appearance().semanticContentAttribute = .forceRightToleft

Я использую Swift 3, Xcode 8.1 и iPad Air 2 с версией ОС 9.3.2. Кто-нибудь знает, как это исправить?

Буду признателен за помощь, спасибо.

0
Jotta E 25 Ноя 2016 в 16:13

2 ответа

Лучший ответ

Установите это свойство ниже

self.navigationItem.leftItemsSupplementBackButton = true

Это обеспечит добавление пользовательских кнопок после кнопки возврата.

< Сильный > Update :

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

    if UIApplication.shared.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirection.rightToLeft{
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: label)
    }else{
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label)
    }

Замените это на

self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label)
1
Dili 27 Ноя 2016 в 06:28

Похоже, явно устанавливая элемент правой кнопки панели, вы перезаписываете стандартную кнопку возврата. К счастью, есть встроенный способ иметь несколько кнопок левой панели, и это даже проще, чем вы думаете. Вместо того, чтобы устанавливать navigationItem.leftBarButtonItem, просто установите navigationItem.leftBarButtonItems! Вот пример:

let backButton = self.navigationItem.leftBarButtonItem
let newButton = UIBarButtonItem(customView: label)
self.navigationItem.leftBarButtonItems = [backButton, newButton]
0
Jacob King 25 Ноя 2016 в 13:36