semanticContentAttribute 是可以让 UI 展示方式 由自左向右 转变为 由右向左(RTL),也是为了特定语言顺序适配
使用 semanticContentAttribute 时需要注意的,布局代码不能使用 left 和 right 而是使用 leading 和 trailing 来替代,不然无法发生镜像行为(RTL)。
UISemanticContentAttribute
unspecified: views 的默认值,使 views 可以 RTL 和 LTR 之间切换
playback:代表播放控制的view,比如 播放、回退、快进、进度条的头部按钮,当发生镜像行为时这种view 是不会翻转的
spatial:代表方向控制view,比如王者荣耀和吃鸡的拨轮,当发生镜像行为时这种view 是不会翻转的
forceLeftToRight:布局方式 强制由左向右
forceRightToLeft:布局方式 强制由右向左
使用场景
国际化
这个国际化主要针对语序是自右向左的,具体实现可以看官方教程。
首先我们可以通过判断内容当前的布局方向来进一步布局
if UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute) == .rightToLeft {
print("rightToLeft")
}else{
print("LeftToRight")
}
这只是一个小小的开始,如果你真的要适配譬如 阿拉伯语 这样的语序,要更改的还有很多,比如 bar 上的 返回按钮、图片是否翻转、 Unicode 等等,这些都在官方教程有所涉及。
UI 讨巧
比如 UIButton 更改文字 和 图片的位置,原来都是重写坐标,现在直接更改 semanticContentAttribute 就好了, 代码如下:
tempButton.semanticContentAttribute = .forceRightToLeft
示例代码
获取代码,通过 set the active scheme 切换查看 RTL 效果。
Left To Right(normal)
Right To Left(mirror)