適配阿拉伯語(yǔ)會(huì)引發(fā)的問(wèn)題:
- UIView的frame發(fā)生翻轉(zhuǎn)
- 圖片鏡像問(wèn)題
- UICollectionViewFlowLayout
- UITableView的header和cell 不會(huì)改變textAlignment
以上問(wèn)題解決方案如下:
問(wèn)題一:UIView的frame發(fā)生翻轉(zhuǎn)
我們可以根據(jù)系統(tǒng)提供的方法,,對(duì)全部的UIView使用鏡像功能
[UIView appearance].semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
[UISearchBar appearance].semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
上述的代碼可以幫助我們禁用鏡像功能,如果想要開(kāi)啟鏡像功能,,只需要將UISemanticContentAttributeForceLeftToRight更改為UISemanticContentAttributeForceRightToLeft
用masonry對(duì)view進(jìn)行約束是,用trailing和leading 代替left和right,,這樣在切換到阿拉伯語(yǔ)是,,系統(tǒng)會(huì)自動(dòng)適應(yīng),這也解決了我們開(kāi)發(fā)中的大部分UI問(wèn)題.
問(wèn)題二:圖片鏡像問(wèn)題
- 在阿拉伯語(yǔ)的情形下 某些圖片是需要鏡像的,。比如帶箭頭的返回按鈕,,正常的情況下,箭頭是朝左的,,在阿拉伯語(yǔ)情形下,。箭頭是朝右的。針對(duì)上述情況,,系統(tǒng)提供了一個(gè)鏡像方法
- (UIImage *)imageFlippedForRightToLeftLayoutDirection API_AVAILABLE(ios(9.0));
- 但是上述方法只適用于系統(tǒng)語(yǔ)言是阿拉伯語(yǔ),,如果app內(nèi)部切換為阿拉伯語(yǔ) 是不生效的,于是有了下方代碼
@implementation UIImage (ImageMirror)
+(UIImage *)cn_imageFlippedForRightToLeftLayoutDirection{
if (isRTL()) {
return [UIImage imageWithCGImage:self.CGImage scale:self.scale orientation:UIImageOrientationUpMirrored];
}
return self;
}
@end
對(duì)于需要在RTL下鏡像的圖片,,手動(dòng)對(duì)image調(diào)用cn_imageFlippedForRightToLeftLayoutDirection即可
在圖片資源中更改圖片屬性
問(wèn)題三:UICollectionViewFlowLayout
flipsHorizontallyInOppositeLayoutDirection是指開(kāi)啟 一個(gè)布爾值,,指示水平坐標(biāo)系是否在適當(dāng)?shù)臅r(shí)間自動(dòng)翻轉(zhuǎn),。 這個(gè)屬性是默認(rèn)關(guān)閉的 如果發(fā)生無(wú)法反轉(zhuǎn)的話(huà),我們需要這樣打開(kāi)。
由于flipsHorizontallyInOppositeLayoutDirection是只讀的屬性,,因此需要我們自定義layout,,并重寫(xiě)getter方法。
問(wèn)題四:UILabel在阿拉伯語(yǔ)狀態(tài)下依然是左對(duì)齊
- 在對(duì)UILabel設(shè)置居中方式的時(shí)候設(shè)置為NSTextAlignmentNatural 會(huì)根據(jù)不同語(yǔ)言,,對(duì)齊方式不同,。
|