几行代码帮你轻松完成ios屏幕适配

来源:互联网 发布:经典的爱情电影 知乎 编辑:程序博客网 时间:2024/06/16 15:25

做ios也有几个月了,原先是做安卓的,但是来公司的时候ios正好离职,所以需要学习ios的知识,但是因为一边要忙工作,所以也没用很多时间去扎实学习c基础和oc比较深层的东西,也算是一边学习一边学习ios开发了, 这几天也稍微闲下来了,所以写博客帮助 做ios没多久的朋友们,一起进步 在做屏幕适配的时候发现ios的第三方适配框架masonry上手没那么快,而且每个控件都要写挺多代码的,所以就在网上找有没有比较简洁的适配代码呢?! 后面找到不错的很简洁的代码 在项目中也用到了,还是很不错的 接下来给大家详细讲解下 。

#import <UIKit/UIKit.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property float autoSizeScaleX;@property float autoSizeScaleY;@end
@interface AppDelegate ()#define ScreenHeight [[UIScreen mainScreen] bounds].size.height#define ScreenWidth [[UIScreen mainScreen] bounds].size.width@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];    if(ScreenHeight > 480){     // 这里以(iPhone6)为准        myDelegate.autoSizeScaleX = ScreenWidth/375;        myDelegate.autoSizeScaleY = ScreenHeight/667;    }else{        myDelegate.autoSizeScaleX = 1.0;        myDelegate.autoSizeScaleY = 1.0;    }       return YES;}

**这里一定要在didFinishLaunchingWithOptions里执行 注意
因为iPhone6屏幕的宽度和高度是375和667, 因此当屏幕尺寸大于iPhone6时, autoSizeScaleX和autoSizeScaleY即为当前屏幕和iPhone5尺寸的宽高比, 如果手机为Iphone6那么屏幕比例为1,如果为Iphone6s,屏幕比放大,Iphone5就屏幕比缩小;
**

好了接下来我们自定义一个设置尺寸的方法

CG_INLINE CGRectTS_CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height){    AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];    CGRect rect;    rect.origin.x = x * myDelegate.autoSizeScaleX;    rect.origin.y = y * myDelegate.autoSizeScaleY;    rect.size.width = width * myDelegate.autoSizeScaleX;    rect.size.height = height * myDelegate.autoSizeScaleY;    return rect;}

这个直接写在Macros文件里就好

接下来也顺便贴上文字适配的代码 ,我们知道在所以所有屏幕里设置的字体大小都是不变的,在Iphone6你设置一个20大小的font,在iphone5里看起来就特别大,所以字体也要进行适配

#define MainScreenWidth [[UIScreen mainScreen] bounds].size.width#define font(R) (R)*(MainScreenWidth)/375.0

因为美工给的标注是Iphone6的,所以

 myDelegate.autoSizeScaleX = ScreenWidth/375; myDelegate.autoSizeScaleY = ScreenHeight/667;和 #define font(R) (R)*(MainScreenWidth)/375.0

都是根据iPhone6来设置的 如果美工给的标注图是其他尺寸的话,把上面提到的三个参数全部改为对应的尺寸,好的接下来演示一下在不同屏幕适配了的效果

使用方法

设置frame TS_CGRectMake() self.btnForgetPassWord=[UIButton alloc]initWithFrame:TS_CGRectMake(161, 499, 54, 12);设置字体大小 font() [self.btnForgetPassWord setFont:[UIFont systemFontOfSize:font(12)]];

iphone6使用效果

这里写图片描述

iphone5使用效果

这里写图片描述

iphone6s Plus使用效果

这里写图片描述

**我们发现在三个机型上图片都适配成功了,而且字体在Iphone5和Iphone6s plus上也进行等比例的放大和缩小了 但是这个适配也是有缺陷的 就是图片的边缘比较薄的话 在iphone5上偶然会出现边缘比较虚 比如这种图 其他设备上正常显示

这里写图片描述

下面是Demo下载地址,如果有问题 可以在下面留言 谢谢。

Demo下载

原创粉丝点击