Right To Left - result0924/iosLearning GitHub Wiki
arabic
to support RTL
Add Autolayout
如果使用的是Autolayout佈局,並且Autolayout下,
使用的是leading和trailing,
系統會自動幫助我們調整佈局,將其適配RTL。
但是如果使用的是left和right,系統是不會這麼做的。
所以為了適配佈局,我們需要將所有的left/right替換成leading和trailing。
ScrollView
extension UIScrollView {
@objc func supportRightToLeft() {
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
let newTransform = CGAffineTransform(scaleX: -1, y: 1)
transform = newTransform
subviews.forEach { subView in
subView.transform = newTransform
}
}
}
}
UIButton
.contentHorizontalAlignment
- left -> leading
- right -> trailing
.imageEdgeInsets / .titleEdgeInsets
- 原本設左邊的padding要改為右邊的
extension UIButton {
/// Sets image insets with conformance to user interface direction
///
/// - Parameters:
/// - insets: Image insets
func setImageEdgeInsets(_ insets: UIEdgeInsets) {
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
imageEdgeInsets = insets
} else {
self.contentEdgeInsets = UIEdgeInsets(top: insets.top, left: insets.right, bottom: insets.bottom, right: insets.left)
}
}
/// Sets title insets with conformance to user interface direction
///
/// - Parameters:
/// - insets: Title insets
func setTitleEdgeInsets(_ insets: UIEdgeInsets) {
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
titleEdgeInsets = insets
} else {
titleEdgeInsets = UIEdgeInsets(top: insets.top, left: insets.right, bottom: insets.bottom, right: insets.left)
}
}
}
UITextField
extension UITextField {
open override func awakeFromNib() {
super.awakeFromNib()
if textAlignment == .natural {
(UIApplication.shared.userInterfaceLayoutDirection == .leftToRight) ? (textAlignment = .right) : (textAlignment = .left)
}
}
}
String
extension String {
func forceUnicodeLTR() -> String {
return "\u{200E}\(self)\u{202c}"
}
func forceUnicodeRTL() -> String {
return "\u{200F}\(self)\u{202c}"
}
}
UIImageView
- can use
imageFlippedForRightToLeftLayoutDirection
rightArrow.image = rightArrow.image?.imageFlippedForRightToLeftLayoutDirection()
Refer
-
適配歷程
-
Right to left rtl localization what you need to know
-
英文字不用跟著翻轉
-
翻轉指示進行的元素(例如,A→B 應該變成 B←A)。此外,鏡像頁面選擇器、滑塊和聊天圖標。同時,媒體控件(例如播放按鈕和進度條)和圓形進度條(即順時針方向)不應鏡像。
-
數字
123
在 RTL 語言中仍然讀作123
,而不是321
。電話號碼(例如,國家代碼-地區代碼-號碼)、時間格式(例如,HH:MM)和品牌名稱也是如此。 -
日期:2021 年 2 月 2 日是 12 月 2 日還是 2 月 12 日?這取決於每個國家使用的標準,而不是腳本的方向。
-
日曆:它們應該反映在 RTL 內容中。此外,針對您的目標區域,驗證一周是從星期日還是星期一開始的。
-
-
make-your-ios-app-compatible-with-right-to-left-languages-in-swiftui-and-uikit