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
comparison.png
示例代碼
獲取代碼,通過 set the active scheme 切換查看 RTL 效果。
Left To Right(normal)
normal.png
Right To Left(mirror)
mirror.png