在 iOS開發(fā)過程中,開發(fā)人員一般會使用純代碼適配或者AutoLayout來進(jìn)行適配.
現(xiàn)在開發(fā)人員主要是使用AutoLayout來適配了, 有的人喜歡使用Masonry來進(jìn)行適配,也有很多人喜歡使用 xib 或者 SB 來做適配, 就性能而言,使用Masonry純代碼是要占據(jù)優(yōu)勢的,使用 xib 或者 SB 是要增加 cpu 的消耗的.
本文主要講的是使用 xib 去適配屏幕和字體大小
對控件添加約束 去自動調(diào)整約束大小
我們需要對"NSLayoutConstraint"添加一個分類 一定要加上"IBInspectable"關(guān)鍵字
property (nonatomic, assign) IBInspectable BOOL isAdaptateScreen;
- (BOOL)isAdaptateScreen {
return YES;
}
- (void)setIsAdaptateScreen:(BOOL)isAdaptateScreen {
//比例
CGFloat proportion = 1.0;
if (Is_IPHONE5) {
//如果是 iPhone5比例設(shè)置為0.85
proportion = 0.85;
}else if (Is_IPHONE6Plus || Is_IPHONEX || Is_IPHONEXs || Is_IPHONEXs_Max || Is_IPHONEXr) {
//如果是 6P,X,XS 或者 XS_MAX設(shè)置為 1.12
proportion = 1.12;
}
//設(shè)置新的約束值
self.constant = self.constant * proportion;
}
然后編譯下就可以在xib 選中約束看到我們可以把約束全選 在同一設(shè)置從而達(dá)到了適配屏幕的效果
對字體大小的自適應(yīng)屏幕的設(shè)置
和適配約束一樣的道理 我們需要給 UILable 添加一個分類, 因?yàn)?UIFont 本身在 xib 上沒有載體,所以我們調(diào)整字體大小只能通過 UILable 來設(shè)置別的不說先上代碼 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 去設(shè)置屬性為 on 如圖模擬器跑起來的效果
如果就完成了約束適配和字體大小適配了, 是不是很方便
源碼在 GitHub
你也可以直接使用 pod 來安裝
pod 'WYAutoLayout'