前言
这是一篇扫盲文章。之前查过很多 Masonry 相关的资料,leading&trailing
和 Left&Right
到底应该使用哪一个。因为常年开发国内的应用,也没有体会到具体的意义。
结论
leading&trailing
会自动适配 RTL(right to left)语言(Arabic 阿拉伯语,Hebrew 希伯莱语);在同一个约束上面,混用
leading&trailing
和Left&Right
,会报错并停止运行;A constraint cannot be made between a leading/trailing attribute and a right/left attribute. Use leading/trailing for both or neither.'
- 在同一 View 上面,混用
leading&trailing
和Left&Right
,只会报约束错误;
Demo
上面是两种语言环境下的 iPhone 截图。这些组件分别是 UILabel,UIView,UIButton。
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.nameLabel.superview);
make.leading.equalTo(self.nameLabel.superview).offset(20);
make.width.mas_equalTo(100);
}];
[self.lineView mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.nameLabel);
make.centerX.equalTo(self.lineView.superview);
make.leading.greaterThanOrEqualTo(self.nameLabel.mas_trailing);
make.width.mas_equalTo(1);
make.top.equalTo(self.nameLabel).offset(-20);
}];
[self.btn mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.lineView);
make.leading.greaterThanOrEqualTo(self.lineView.mas_trailing);
make.trailing.equalTo(self.btn.superview.mas_trailing).offset(-20);
}];
因为 UIView 是 centerX 它的 superView。所以在上图会看起来位置没有发生变换。但是,UIButton 和 UILabel 的位置刚好调换了过来。
开始还以为文字也会从右到左转换过来,但是文字却没有任何变化。其实需要自己做阿拉伯语言的本地化文件,而阿拉伯语就是从右到左书写的。
另外的配置
如果你需要在模拟器里面看到其它语言的效果,你需要 Xcode 里面进行下面的配置:
- PROJECT -> <ProjectName> -> Info -> Localizations;
- 点击 “+”,添加 Arabic 语言;
Edit Scheme -> Options -> Application Language -> Arabic。
在模拟器运行即可看到阿拉伯语言的效果,不需要在模拟器系统里面设置【语言与地区】为阿拉伯语。因为如果你不会阿拉伯语言,会很难改回去...,血的教训),最后只能重置模拟器。
本文由 Bill 创作。
最后编辑时间为: 2019.01.21 at 09:38 am