MDCAppBar (swift iOS) не может перевернуть изображение кнопки возврата - PullRequest
0 голосов
/ 28 февраля 2019

Я использую MDC (компоненты дизайна материалов) для создания своего пользовательского интерфейса в приложении для iOS, у меня в приложении 2 языка - английский и арабский, при переключении на арабский язык я вынуждаю направо справа налево ко всем своим представлениям, это прекрасно работаеткак показано на рисунках ниже:

enter image description here

форсирование RTL для всех представлений в AppDelegate следующим образом:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UIView.appearance().semanticContentAttribute = .forceRightToLeft
    }

результат:

enter image description here

Но проблема, когда я нажимаю контроллер вида в режиме слева направо, выглядит так:

enter image description here

Но в режиме RTL это выглядит следующим образом:

enter image description here

Я пытаюсь перевернуть кнопку возвратагоризонтально, но безуспешно, вот код в моем контроллере push-представления:

class UserCartViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        (UIApplication.shared.delegate as! AppDelegate).appBar?.navigationBar.backItem?.image?.mdf_imageWithHorizontallyFlippedOrientation()
    }

}

backItem в данном случае nil, но когда я задерживаю код:

class UserCartViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
            (UIApplication.shared.delegate as! AppDelegate).appBar?.navigationBar.backItem?.image?.mdf_imageWithHorizontallyFlippedOrientation()
        }
    }

}

у backItem есть значение и изображение, но mdf_imageWithHorizontallyFlippedOrientation() не работает, поэтому мои вопросы:

  • Есть ли лучший способ исправить кнопку возврата по умолчаниюMDCAppBar переворачивается, когда я заставляю все представления быть RTL?
  • Почему после временной задержки я получаю значения для кнопки назад, есть ли какая-либо функция или делегат, запущенный, когда MDCAppBar готов?
  • И, наконец, почему mdf_imageWithHorizontallyFlippedOrientation() не работает с изображением?

Заранее спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

В RTL только объект меняет место справа налево, но изображение отображается как есть (изображение не будет переворачиваться), поэтому, в этом случае вам нужно проверить условие, если текущий язык приложения RTL, затем использовать изображение соответствующим образом, см. Следующий код,

if(UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft) {
    //RTL //assign forword arraow
} else {
    //LTR //Assign back arrow
}

см. Этот пост для получения дополнительной информации https://medium.com/if-let-swift-programming/working-with-localization-in-swift-4a87f0d393a4

...