推送iOS专业知识分享(iOS)

iOS对不同的屏幕进行字体适配

2016-05-23  本文已影响5906人  Molary

1.在不同的手机上对应的字体大小可能不同,一般的来说在 iphone 4 5 6的手机上的字体是一样大小,在6P上的字体是4 5 6上的1.5倍,

下面进行label和button的字体适配

1.先创建label的延展

#import <UIKit/UIKit.h>
#import <objc/runtime.h>
@interface UILabel (DXFont)

@end



#import "UILabel+DXFont.h"
@implementation UILabel (DXFont)
+ (void)load{
//利用running time运行池的方法在程序启动的时候把两个方法替换 适用Xib建立的label
Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);  //交换方法
}

- (id)myInitWithCoder:(NSCoder*)aDecode{
[self myInitWithCoder:aDecode];
if (self) {
    //部分不像改变字体的 把tag值设置成LabelFontSize值的跳过
    if (IS_IPHONE_6P) {
        
        if(self.tag != LabelFontSize) {
            CGFloat fontSize = self.font.pointSize;
            self.font = [UIFont systemFontOfSize:fontSize*1.5];
        }   
    }
    }
return self;
}

2.button的实现

#import <UIKit/UIKit.h>
#import <objc/runtime.h>
@interface UIButton (DXFont)

@end


#import "UIButton+DXFont.h"
@implementation UIButton (DXFont)
+ (void)load{

//利用running time运行池的方法在程序启动的时候把两个方法替换 适用Xib建立的label
Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);  //交换方法
}

- (id)myInitWithCoder:(NSCoder*)aDecode{
[self myInitWithCoder:aDecode];
if (self) {
    //部分不像改变字体的 把tag值设置成2016跳过
    if (IS_IPHONE_6P) {
        if(self.tag != 2016) {
            CGFloat fontSize = self.titleLabel.font.pointSize;
              self.titleLabel.font = [UIFont systemFontOfSize:fontSize*1.5];
        }
    }
}
return self;
}

如果要适配根据不同的屏幕使用不同的尺寸把后面的1.5 换成 下面定义的宏就可以啦

//不同设备的屏幕比例(当然倍数可以自己控制)
#define SizeScale ((IPHONE_HEIGHT > 568) ? IPHONE_HEIGHT/568 : 1)

参考文档:http://www.jianshu.com/p/5815e81abb52

上一篇下一篇

猜你喜欢

热点阅读