文章由于iPhone X,导致高度比例问题,取消高度作为比例,直接用宽度比例. 近期我会抽空录制适配教学适配,希望能帮助到大家,要相信一句话,用起来越简单,可定制性就越差(不可横屏适配,不可适配iPad,当苹果不按常规屏幕比例出牌,都会出问题.)
隨著iPhoneX即將上市,本文的捷徑適配或許不再適用了,要記住,用起來最簡單的,往往局限性最大的,這種並不能做橫屏適配,屏幕适配并非真正的放大缩小,我会录制一个视频,重新说一下适配(基于storyboard,xib开发)
老规矩,上图
首先,除了iPhone4, iPhone5,6,6plus机型,都是成比例的,也就是每个屏幕的宽度/高度都是相等的,所以我们可以利用这个成比例,写以下代码
/*
屏幕适配
*/
//判断设备类型
#define iPhone4 ([UIScreen mainScreen].bounds.size.height == 480)
#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size)) : NO)
#define iPhone6plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(1125, 2001), [[UIScreen mainScreen] currentMode].size) || CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size)) : NO)
// 判断是否是iPhone X
#define iPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
// 状态栏高度
#define STATUS_BAR_HEIGHT (iPhoneX ? 44.f : 20.f)
// 导航栏高度
#define NAVIGATION_BAR_HEIGHT (iPhoneX ? 88.f : 64.f)
/// 导航栏高度(不包括状态栏)
#define NAVI_BAR_HEIGHT 44.0f
/// Tab Bar高度
#define TABBAR_HEIGHT (iPhoneX ? (49.f+34.f) : 49.f)
#define kScreenHeight [UIScreen mainScreen].bounds.size.height
#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kWidth(R) (R)*(kScreenWidth)/320 这里的320我是针对5s为标准适配的,如果需要其他标准可以修改
#define kHeight(R) kWidth(R) 这里的568我是针对5s为标准适配的,如果需要其他标准可以修改
代码简单我就不介绍了,
以此思想,我们可以对字体下手
#define font(R) (R)*(kScreenWidth)/320.0 这里是5s屏幕字体
#define kFONT16 [UIFont systemFontOfSize:font(16.0f)]
效果图如下
可以看到屏幕label的地方,我这里只写iPhone5s的代码,在iPhone7跑起来以后,界面是成比例的,连同字体也是.
不用百度的那么多屏幕适配,简单几句搞定.
唉,又技术泄露了.
转载记得加上俺名字,谢谢.