MDCAppBar(swift iOS)无法翻转后退按钮的图像

时间:2019-02-28 08:14:19

标签: ios swift mdc-components

我正在使用MDC(材料设计组件)在iOS应用程序中构建UI, 我的应用程序中有2种语言,英语和阿拉伯语,切换到阿拉伯语时,我会强制从右向左浏览所有视图,如下图所示,效果很好:

enter image description here

在AppDelegate中的所有视图上强制RTL,如下所示:

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

我试图水平翻转“后退”按钮,但是这里没有成功,这是推送视图控制器中的代码:

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()
    }

}

在这种情况下,backItemnil,但是当我延迟代码时:

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()无法正常工作,所以我的问题是

  • 当我强制所有视图均为RTL时,是否有更好的方法来固定MDCAppBar的默认后退按钮?
  • 为什么在延时之后我得到后退按钮的值,当MDCAppBar准备就绪时,是否触发了任何函数或委托?
  • 最后为什么mdf_imageWithHorizontallyFlippedOrientation()不能在图像上工作?

预先感谢

1 个答案:

答案 0 :(得分:1)

在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