我正在使用MDC(材料设计组件)在iOS应用程序中构建UI, 我的应用程序中有2种语言,英语和阿拉伯语,切换到阿拉伯语时,我会强制从右向左浏览所有视图,如下图所示,效果很好:
在AppDelegate中的所有视图上强制RTL,如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UIView.appearance().semanticContentAttribute = .forceRightToLeft
}
结果是:
但是当我将视图控制器从左到右推入时,问题看起来像这样:
但是在RTL模式下,它看起来如下:
我试图水平翻转“后退”按钮,但是这里没有成功,这是推送视图控制器中的代码:
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()
无法正常工作,所以我的问题是
mdf_imageWithHorizontallyFlippedOrientation()
不能在图像上工作?预先感谢
答案 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