amoled|iOS开发RTL(阿拉伯地区)适配

amoled|iOS开发RTL(阿拉伯地区)适配

文章图片

amoled|iOS开发RTL(阿拉伯地区)适配

文章图片

amoled|iOS开发RTL(阿拉伯地区)适配

文章图片

amoled|iOS开发RTL(阿拉伯地区)适配

文章图片

amoled|iOS开发RTL(阿拉伯地区)适配

最近公司需求 , 海外产品需要适配RTL布局 , 阿拉伯地区右侧布局模式 。
寻找了很多方法 , 也尝试了很多种方法 , 最终有了一知半解的理解 , 应用到项目当中的时候发现会有很多问题 , 折磨了一周 , 突然发现是在项目中的一个扩展影响到了布局的改变 。
上代码:


项目截图
在这里要注意left和right
如果你是用的Auto的话你就不能用left、right了你需要改成leading 、trailing这样的话系统就会自动适应(我项目中用的不是Auto , 所以我没有尝试)
我项目中用的是frame的写法 , 系统就非常不友好了 。 需要自己处理 。
下面说一下图片镜像:

系统图片镜像API
我试过了很多图片不能用 , 下面来介绍黑魔法:

系统api
在项目中可以根据语言自动切换
接下来就是UIButton 的内边距:

hookUIButton的方法
在直播项目中聊天室公屏的适配
在聊天室公屏聊天区域展示的是用户的昵称以及发送的文字 , 表情 , 礼物等 。 具体展示如下图:

聊天室聊天区域展示的消息
在这个地方存在很多问题(Auto除外):图文混排我是用的YYText框架 。 正常环境下展示没有任何问题 。 当且切换语言到阿拉伯语的时候所有的布局如上图所示 。 在RTL环境中冒号(:)和型号(*)会影响数据排列的循序 。 所以我的处理方式是把冒号(:)和星号(*)用别的字符给替换掉 。 这里就要用到运行时:通过hookUILabel的setText方法更改所有的文字 。 如图:

hookUILabel的text方法
这样处理 , 项目中的大部分文字都可以改掉 , 对于富文本我单独处理hookUILabel的attributeText方法跟上图方法一样把setText改成setAtrributeText方法 。
对于UITableView , UICollectionView , UIScrollView就需要我们单独处理 , 通过查找文档发现 。
UITableView不用处理 , 只需要更改Cell的UI顺序即可.
UICollectionViewFlowLayout有两个代理方法需要实现:

在collectionView实现的地方写

自定义layout里面写
对于UIScrollView我的做法是把所有的数据源翻转 , 其它的什么也不用处理 。
最后最重要的是更改视图的显示顺序:
在这里系统有几个属性需要处理:

更改UIView的展示顺序
【amoled|iOS开发RTL(阿拉伯地区)适配】以上就是对RTL(阿拉伯地区适配)的见解 。 如有不对的地方 , 欢迎评论 。


    推荐阅读