iOS 界面适配右到左语言

方向判断

#pragma mark 当前是否从右到左
+ (BOOL)isRightToLeftLanuage
{
    if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft) {
        return YES;
    }
    
    return NO;
}

1.自动布局.

建议使用自动布局,并且使用Leading和trailing,不建议使用left和right;

2.文本对其

建议使用NSTextAlignmentNatural的文本对其方式!(居中对其除外), ios 8默认是NSTextAlignmentLeft, ios9 默认NSTextAlignmentNatural

3.富文本

attribute建议使用NSMutableParagraphStyle,并设置为NSTextAlignmentNatural;

NSMutableParagraphStyle *mulParagraphStyle = [[NSMutableParagraphStyle alloc] init];
[mulParagraphStyle setAlignment:NSTextAlignmentNatural];
[mutableAttributedString addAttribute:NSParagraphStyleAttributeName value:mulParagraphStyle range:NSMakeRange(0, model.itemDetailName.length)];

4.图片强制翻转,图片是有方向性的

最具代表性的是cell箭头需要强制性翻转;

// UIImage的翻转
if (version >= ios9) {
    [image imageFlippedForRightToLeftLayoutDirection];
}  else {
    UIImage *flipImage = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationUpMirrored];
}

5. Leading 和 AlignCenterY

Leading和AlignCenterY不要同时使用. 上次在改一处问题的时候,发现Leading和AlignCenterY一起使用会不显示的问题。

6.如果代码使用frame,没有使用约束,但是又想快速解决适配的问题

使用翻转可以快速解决你的问题 左到右-->右到左翻转180度,但是这个view不应该有文字信息,否则文字显示是错误的

//给view扩展方法
self.transform = CGAffineTransformMakeScale(-1.0, 1.0);
  • 如果是UIScrollView, 手势事件也是会翻转过来的,不用另外处理了
  • 如果是UIImageView,UIImage还是需要单独修改方向,UIImage的方向是翻转不过来的
  • 如果是UIView的touch方法,获取的坐标还是之前的坐标,需要拿frame处理一下 ABS(self.bounds.size.width - touchPointX);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容