ios解决屏幕适配,字体适配,一个小工具就够了!

随着苹果越来越多机型问世,原先困扰安卓开发者的屏幕适配问题现在也开始困扰苹果开发者了,如何用最简单的方法解决屏幕适配的问题呢?
本文主要针对用ui设计人员给的设计稿书写ui,保证其在任何屏幕上面都不变形。所有代码为纯手写。个人比较喜欢手写ui,因为手写的ui和设计稿上面是一致的,每次ui更换设计稿的时候我只要和她一样改几个数值就可以保证我的ui和设计稿保持一致。
我们拿到ui的设计稿时,一般有个参考的屏幕大小,比如我们公司的就是750*1334的,但是我们的每个机型尺寸都是不一样的。当我拿到一个480 *640的机型时,我能想到的方法就是,把原先在750 *1334机型上宽度占100的控件,换算成100/750。再乘以480.这样就可以保证那个控件还在相同的位置,保持相同的大小,不会变形。而当我们在一个960*1800的机型上面,它的宽度只要调整为960*100/750就可以了。
所以实际上,我们新屏幕的值可以用以下公式确定
ow:设计稿总宽度
oh:设计稿总高
nw:具体手机宽度
nh:具体手机高度
w:设计稿上面具体控件的宽
h:设计稿上面居停控件的高
adaptedh:调整后在我们新的手机上面的高
adaptedw:调整后在我们新的手机上的宽

adaptedw = w/ow*nw;
adaptedh = h/oh*nh;

每当有一个新的屏幕出现,我们只要替换掉上述公式的最后一个值,就可以实现永远是在同样的位置这一需求。
新建一个object-c文件。在。h文件中实现如下代码

#import 

@interface UIUtil : NSObject
@property (nonatomic) float width;
@property (nonatomic) float height;
-(instancetype) initWithWidthAndHeight:(int)width height:(int)height;
-(int)adaptedWidth:(float)width;
-(int)adaptedHeight:(float)height;
@end

这个文件里面定义了两个参数三个方法。长,宽,初始化长宽的方法,获取调整后长宽的方法。
接下来我们在。m文件里面写它们的具体实现

#import "UIUtil.h"

@implementation UIUtil

-(int)adaptedWidth:(float)width{
    return (int)_width*width/500;
}
-(int)adaptedHeight:(float)height{
    return  (int)_height*height/1000;
}


-(instancetype) initWithWidthAndHeight:(int)width height:(int)height
{
    if(self = [super init]){
        _width=width;
        _height=height;
    }
    return self;
}
@end

这里的500和1000可以替换为你设计稿的任意值
然后在使用时,我们需要根据当前屏幕的宽高初始化这个工具,在使用的地方这样写

UIUtil * ui = [UIutil alloc] initWithWidthAndHeight:[UIScreen mainScreen].bounds.size.width height:[UIScreen mainScreen].bounds.size.height];

这样就成功初始化了这个工具,每次调用的时候根据你的设计稿这样写

 UIImageView *login = [[UIImageView alloc]initWithFrame:CGRectMake(0, 64+[UI adaptedHeight:104], self.view.frame.size.width, [UI adaptedHeight:250]) ];

[UI adaptedHeight: 104];就是我们设计稿上104大小的尺寸调整到我们现在的屏幕比例上面的尺寸,最后要注意的是width方向上面一定要用adaptedWidth,height方向上一定要用adaptedheight
这个工具不光可以用来写frame,对于字体大小变形也同样适用,我们知道字体在设置大小的时候都需要你传入一个值,我们只要把你设计稿上面的值传入,也同样可以得到你想要的字体大小
int textsize = [ui adaptedwidth: 24]
这个字体大小就是我们根据宽度比例来重设的字体大小.
当然工具是死的,人是活的,在遇到一些必须保持宽高一致的控件时,我们初始化的时候还是记得把宽和高设置为一样的,就是宽和高都填入 adapted xxx就行了

你可能感兴趣的:(ios,ios,ui,ui设计,屏幕适配,字体适配)