xib适配机型

1 篇文章 0 订阅

 

从接触ios开始,我就是忠实的可视化开发的搬运工——俗称UI拖拽师!
本编主要送给那些年热爱xib,喜欢效率的ios程序猿们。它可能解决你多年的心病!一直挥散不去的禁锢于代码的约束,一群技术大牛此时应该会鄙视,但我乐此不疲。
正题开始:此篇文章的主要内容是利用运行时和xib的机制,用少许的代码适配所有机型。简单粗暴而不失优雅!用了我这套方法你只要在375的xib里面随心所欲的约束,然后就可以适配刘海屏,plus屏,se屏等等。

  • 首先我要引入一个关键字IBDesignable(此处应该有些掌声)
    这个神奇的关键字IBDesignable的效果就是给xib的右边栏加一个属性列表,然后你可以通过属性列表将其赋值以达到针对不同机型来适配屏幕。

     

     

  • 上图清晰的说明操作
    1.建一个NSLayoutConstraint类别,给他加属性。
    请注意给类别加属性需要用到运行时来实现。原理不就细说了,自己找度娘。继续上图

     

     

注意宏的定义是这个方法的关键,通过当前屏幕的尺寸和375的尺寸做对比。

 

 

做完这个功夫后,就差最后一步达到效果就是去开启这个效果!

 

image.png

image.png

选中一个纵向的约束 然后对应的去打开,由于我的命名太长被...代替了,他的顺序是和h文件命名的顺序一样,第一个是W横向的,第二个是H纵向的。所以我们打开纵向的。IBDesignable的关键词就起了作用,属性添加的是Bool值所有选的时候会出现ON和OFF。
通过这个操作,就可以随意操作xib了。然后布局完成后对应把所有的纵向和横向的依次设置一下开关,他就会随着屏幕的尺寸而放大和缩小。

  • 很多朋友又要说:你这个值适配了约束,字体又不会变。那这个又怎么实现呢。来吧。第二步来了,干字体。
    字体怎么加呢。其实也很简单!用运行时,根据xib的加载机制。在他加载的某个阶段把当下的字体取出来,然后根据相应的机型去设置字体大小就行了。来来来上图

     

     

利用runtime实现方法的转换,通过屏幕变换的比例进行字体的缩放;

#import <objc/runtime.h>

@implementation UIFont (runtime)

+ (void) load{

    Method   newMethod =  class_getClassMethod([self class],@selector (adjustFont:));

    // 获取替换前的类方法

    Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));

    // 然后交换类方法,交换两个方法的IMP指针,(IMP代表了方法的具体的实现)

    method_exchangeImplementations(newMethod, method);

}

 

+ (UIFont *) adjustFont:(CGFloat)fontSize{

    UIFont *newFont = nil;

    newFont = [UIFont adjustFont:fontSize * [UIScreen mainScreen].bounds.size.width/375.0];

    return newFont;

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值