美文网首页iOSiOS开发 Objective-C
[iOS开发]iOS12屏幕适配

[iOS开发]iOS12屏幕适配

作者: codeTao | 来源:发表于2019-03-06 18:57 被阅读0次

    简介:根据开发工具Xcode10,
    硬件:苹果放弃4s/5/5c,从se,5s及以上的手机适配
    软件:支持iOS8.0及以上系统适配。

    iPhoneX系列设备对比

    名称 屏幕分辨率 代码获取屏幕大小 使用几倍图
    iPhone X 1125×2436 {375, 812} @3x
    iPhone XR 828x1792 {414, 896} @2x
    iPhone XS 1125×2436 {375, 812} @3x
    iPhone XS Max 1242x2688 {414, 896} @3x

    由上可知:
    iPhone X和iPhone XS屏幕大小是一样的,与iPhone 4.7寸屏系列,屏幕宽度一致,只是高度不一样。
    iPhone XR和iPhone XS Max屏幕大小是一样的,与iPhone5.5寸屏系列,屏幕宽度一致,只是高度不一样。
    并且目前所有的刘海屏的上下安全距离大小是一样的状态栏高度为44,底部高度为34。
    根据这些体征,我们完全可以把对iPhone X的屏幕适配修,改为对所有的刘海屏的屏幕适配。利用其高度的特殊性。

    修改代码如下方法一:

    方法一: 根据高度适配宏定义

    注: 简单的UI适配可以这么判断

    //屏幕宽高
    #define kScreenW [UIScreen mainScreen].bounds.size.width
    #define kScreenH [UIScreen mainScreen].bounds.size.height
    // 刘海屏 宏定义
    #define iPhoneX ((kScreenH == 812.f || kScreenH == 896.f) ? YES : NO)
    // 适配刘海屏状态栏高度
    #define SK_StatusBarHeight (iPhoneX ? 44.f : 20.f)
    // 适配iPhone X 导航栏高度
    #define SK_NavHeight (iPhoneX ? 88.f : 64.f)
    
    
    // 适配iPhone X Tabbar距离底部的距离
    #define SK_TabbarSafeBottomMargin (iPhoneX ? 34.f : 0.f)
    // 适配iPhone X Tabbar高度
    #define SK_TabbarHeight (iPhoneX ? (49.f+34.f) : 49.f)
    

    方法二: 根据size适配宏定义

    注:如果是分机型设置字号和布局的话, 可以使用此宏定义

    • iPhone系列判断宏定义
    //判断是否是iPad
    #define isPad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    //判断iPhone4系列
    #define kiPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhone5系列
    #define kiPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhone6系列
    #define kiPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhone6+系列
    #define kiPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhoneX
    #define IS_IPHONE_X ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPHONEXr
    #define IS_IPHONE_Xr ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhoneXs
    #define IS_IPHONE_Xs ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    //判断iPhoneXs Max
    #define IS_IPHONE_Xs_Max ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)
    
    • navBar和tabBar的判断
    //iPhoneX系列
    #define Height_StatusBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 44.0 : 20.0)
    #define Height_NavBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 88.0 : 64.0)
    #define Height_TabBar ((IS_IPHONE_X==YES || IS_IPHONE_Xr ==YES || IS_IPHONE_Xs== YES || IS_IPHONE_Xs_Max== YES) ? 83.0 : 49.0)
    

    相关文章

      网友评论

        本文标题:[iOS开发]iOS12屏幕适配

        本文链接:https://www.haomeiwen.com/subject/edrzuqtx.html