有時(shí)候不想用純代碼寫(xiě)頁(yè)面伪冰,用xib拖控件,需要考慮在不同設(shè)備上的尺寸和字體適配咖为,比如設(shè)計(jì)圖在iPhone8上控件寬度100揣炕,那么在plus機(jī)型上如果也是100那就不好看了帘皿,因此可以用比例換算w = (screenW / 375) * 100來(lái)得到適配好的尺寸,這個(gè)方式用純代碼開(kāi)發(fā)沒(méi)問(wèn)題畸陡,如何應(yīng)用在xib上呢鹰溜?
尺寸實(shí)配方案:
通過(guò)category給NSLayoutConstraint對(duì)象添加屬性xibSizeFit,重寫(xiě)get和set方法罩锐,利用runtime對(duì)該屬性重新賦值奉狈,新值w = (screenW / 375) * 舊值;
具體看如下實(shí)現(xiàn)
#import <objc/runtime.h>
@implementation NSLayoutConstraint (Fit)
static void *xibSizeFit_key = &xibSizeFit_key;
- (void)setXibSizeFit:(CGFloat)xibSizeFit {
self.constant = KScaleH(xibSizeFit);
NSLog(@"%f -- %f", xibSizeFit,KScaleH(xibSizeFit));
objc_setAssociatedObject(self, &xibSizeFit_key, @(xibSizeFit), OBJC_ASSOCIATION_ASSIGN);
}
- (CGFloat)xibSizeFit {
return [objc_getAssociatedObject(self, &xibSizeFit_key) floatValue];
}
@end
字體適配方案(原理同上):
#import "UILabel+Fit.h"
#import "Macro.h"
#import <objc/runtime.h>
@implementation UILabel (Fit)
static void *xibFontFit_key = &xibFontFit_key;
- (void)setXibFontFit:(CGFloat)xibFontFit {
self.font = [UIFont fontWithName:self.font.fontName size:KScaleH(xibFontFit)];
objc_setAssociatedObject(self, &xibFontFit_key, @(xibFontFit), OBJC_ASSOCIATION_ASSIGN);
}
- (CGFloat)xibFontFit {
return [objc_getAssociatedObject(self, &xibFontFit_key) floatValue];
}
@end
看下效果
image.png