WYAutoLayout
示例
要运行示例项目,首先克隆仓库,然后在 Example 目录中运行 pod install
。
需求
在 iOS 开发过程中,开发人员通常会使用纯代码适配或 AutoLayout 进行适配。现在,开发人员主要是使用 AutoLayout 进行适配,有些人喜欢使用 Masonry 进行适配,也有很多人喜欢使用 xib 或 SB 进行适配。从性能方面来看,使用 Masonry 进行纯代码适配更有优势,而使用 xib 或 SB 将会增加 CPU 的消耗。
##本文主要讲解使用 xib 进行屏幕和字体大小的适配
对控件添加约束 并自动调整约束大小
我们需要对 "NSLayoutConstraint" 添加一个分类,一定要加上 "IBInspectable" 关键字
property (nonatomic, assign) IBInspectable BOOL isAdaptateScreen;
- (BOOL)isAdaptateScreen {
return YES;
}
- (void)setIsAdaptateScreen:(BOOL)isAdaptateScreen {
//比例
CGFloat proportion = 1.0;
if (Is_IPHONE5) {
//如果是 iPhone5比例设置为0.85
proportion = 0.85;
}else if (Is_IPHONE6Plus || Is_IPHONEX || Is_IPHONEXs || Is_IPHONEXs_Max || Is_IPHONEXr) {
//如果是 6P,X,XS 或者 XS_MAX设置为 1.12
proportion = 1.12;
}
//设置新的约束值
self.constant = self.constant * proportion;
}
然后编译就可以在 xib 中选择约束,看到
我们可以在同一设置下全选约束,从而实现屏幕适配的效果。
对字体大小自适应屏幕的设置
与适配约束的道理相同,我们需要给UILable添加一个分类,因为UIFont本身在xib上没有载体,所以我们调整字体大小只能通过UILable来实现。下面是UIFont的分类代码。
+ (UIFont *)wy_systemFontOfSize:(CGFloat)fontSize {
return [UIFont systemFontOfSize:fontSize + [self wy_FontScaleSize]];
}
+ (UIFont *)wy_boldSystemFontOfSize:(CGFloat)fontSize {
return [UIFont wy_boldSystemFontOfSize:fontSize + [self wy_FontScaleSize]];
}
+ (CGFloat)wy_FontScaleSize {
if (Is_IPHONE5) {
return -2;
}else if(Is_IPHONE6) {
return 0;
}else{
return 1;
}
}
UILable 分类代码
//适配屏幕的字体
@property (nonatomic, assign) IBInspectable BOOL isAdapterFont;
- (BOOL)isAdapterFont {
return YES;
}
- (void)setIsAdapterFont:(BOOL)isAdapterFont {
BOOL isBold = [self.font.fontName hasSuffix:@"-Bold"];
CGFloat adapterSize = self.font.pointSize + [UIFont wy_FontScaleSize];
if(isBold) {
self.font = [UIFont boldSystemFontOfSize:adapterSize];
} else {
self.font = [UIFont systemFontOfSize:adapterSize];
}
}
适配字体大小的方式和适配约束的方式相同,都是在xib中选择UILable,将属性设置为on,如图 模拟器跑起来的效果
约束适配和字体大小适配就完成了,是不是很方便?
源码在 GitHub
安装
WYAutoLayout可以通过CocoaPods获取。要安装它,请在Podfile中添加以下行
pod 'WYAutoLayout'
作者
wyxlh,[email protected]
许可证
WYAutoLayout 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。