iOS阿拉伯语适配

适配阿拉伯语会引发的问题:

  1. UIView的frame发生翻转
  2. 图片镜像问题
  3. UICollectionViewFlowLayout
  4. UITableView的header和cell 不会改变textAlignment

以上问题解决方案如下:

问题一:UIView的frame发生翻转

  • 我们可以根据系统提供的方法,对全部的UIView使用镜像功能
    [UIView appearance].semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
    [UISearchBar appearance].semanticContentAttribute = UISemanticContentAttributeForceLeftToRight;
    上述的代码可以帮助我们禁用镜像功能,如果想要开启镜像功能,只需要将UISemanticContentAttributeForceLeftToRight更改为UISemanticContentAttributeForceRightToLeft

  • 用masonry对view进行约束是,用trailing和leading 代替left和right,这样在切换到阿拉伯语是,系统会自动适应,这也解决了我们开发中的大部分UI问题.

问题二:图片镜像问题

  • 在阿拉伯语的情形下 某些图片是需要镜像的。比如带箭头的返回按钮,正常的情况下,箭头是朝左的,在阿拉伯语情形下。箭头是朝右的。针对上述情况,系统提供了一个镜像方法
  • (UIImage *)imageFlippedForRightToLeftLayoutDirection API_AVAILABLE(ios(9.0));
  • 但是上述方法只适用于系统语言是阿拉伯语,如果app内部切换为阿拉伯语 是不生效的,于是有了下方代码
    @implementation UIImage (ImageMirror)
    +(UIImage *)cn_imageFlippedForRightToLeftLayoutDirection{
    if (isRTL()) {
    return [UIImage imageWithCGImage:self.CGImage scale:self.scale orientation:UIImageOrientationUpMirrored];
    }
    return self;
    }

@end
对于需要在RTL下镜像的图片,手动对image调用cn_imageFlippedForRightToLeftLayoutDirection即可

  • 在图片资源中更改图片属性
    问题三:UICollectionViewFlowLayout

  • flipsHorizontallyInOppositeLayoutDirection是指开启 一个布尔值,指示水平坐标系是否在适当的时间自动翻转。 这个属性是默认关闭的 如果发生无法反转的话,我们需要这样打开。

  • 由于flipsHorizontallyInOppositeLayoutDirection是只读的属性,因此需要我们自定义layout,并重写getter方法。

问题四:UILabel在阿拉伯语状态下依然是左对齐

  • 在对UILabel设置居中方式的时候设置为NSTextAlignmentNatural 会根据不同语言,对齐方式不同。

你可能感兴趣的:(iOS阿拉伯语适配)