美文网首页
iOS 学习笔记--UI适配

iOS 学习笔记--UI适配

作者: sunrise_min | 来源:发表于2019-04-26 13:17 被阅读0次

    每次遇到适配的问题都去百度,很浪费时间,所以这里整理下自己的使用以及搜索到的数据,以供下一次自己查看。

    适配的屏幕相关数据(非原创,道友分享文章的截图,文章会列举在下方)

    nav
    tab

    代码中目前我使用的与适配相关的宏

    #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
    #define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
    //状态栏的高度
    #define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
    //导航栏title的高度
    #define kNavBarHeight 44.0
    //tabBar的高度
    #define kTabBarHeight ( Device_Is_iPhoneX_Devices ? 83 : 49)
    //状态栏+导航栏的高度
    #define kTopBarHeight (kStatusBarHeight + kNavBarHeight)
    //判断是否是X系列(很多方法,下面还有无夜之星辰分享的判断方法,使用状态栏高度进行判断)
    #define Device_Is_iPhoneX_Devices \
    ({BOOL isPhoneX = NO;\
    if (@available(iOS 11.0, *)) {\
    isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
    }\
    (isPhoneX);})
    
    //非X系列没特殊情形时状态栏的高度
    #define SYS_STATUSBAR_HEIGHT                20
    //热点栏高度
    #define HOTSPOT_STATUSBAR_HEIGHT            20
    
    // 根据APP_STATUSBAR_HEIGHT判断是否存在热点栏
    #define IS_HOTSPOT_CONNECTED (kStatusBarHeight==(SYS_STATUSBAR_HEIGHT+HOTSPOT_STATUSBAR_HEIGHT) ? YES : NO)
    

    1. X系列机型的判断

    1. 无夜之星辰分享的 判断是否是iPhoneX系列机型
    • iPhoneX系列都是刘海屏,状态栏高度都是44,不管是普通状态下还是特殊状态下(通话中或热点被接入)。
    • 其余机型的状态栏高度在常规状态下是20,特殊状态下(通话中或热点被接入)是40。
    • 因此“状态栏高度==44”可以作为切入点,判断是否是iPhoneX系列机型的宏如下:
    #define iPhoneXSeries (([[UIApplication sharedApplication] statusBarFrame].size.height == 44.0f) ? (YES):(NO))
    
    • 缺点是这个不知道以后的iphone会怎么设计,这个方法是目前可行
    • 注意:当隐藏了状态栏的时候状态栏的高度是0,所以根据状态栏判断机型前得先判断状态栏是否被隐藏了。
    1. 使用安全区域判断
    #define Device_Is_iPhoneX_Devices \
    ({BOOL isPhoneX = NO;\
    if (@available(iOS 11.0, *)) {\
    isPhoneX = [[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0;\
    }\
    (isPhoneX);})
    

    2. 全面屏的适配

    下面是关于全面屏的尺寸总结的很好

    • 安全区域的概念,但是只支持iOS11.0以上,所以需要进行版本判断;
    • SafeAreaiOS7以后,苹果给UIViewController引入了topLayoutGuide 和 bottomLayoutGuide两个属性。用于表示顶部或底部的高度。到了iOS11,苹果弃用了topLayoutGuide和bottomLayoutGuide两个属性。引入了safeArea代替。官方的建议是
      :不能被遮挡的内容和控件在安全区域范围内显示。如果视图底部有按钮,在全面屏下,请约束底部距离34,不要影响到Home功能。

    3. 以上内容借鉴的文章

    相关文章

      网友评论

          本文标题:iOS 学习笔记--UI适配

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