zoukankan      html  css  js  c++  java
  • iOS开发系列-iOS适配

    概述

    发布iPhone X 系统版本为iOS11, 由于刘海屏原因需要对新的机型做适配。

    iPhone X

    safeArea

    iOS11苹果提出safeArea替代iOS7引入 topLayoutGuide 和 bottomLayoutGuide 

     

     对于safeArea体现 iOS11增加了新的API 

    UIView

    UIViewController 

    safeAreaLayoutGuide

    UILayoutGuide *safeAreaLayoutGuide父类NSobject,在API看到内部有两个属性,官方文档描述

    @property(nonatomic,readonly) CGRect layoutFrame;
    @property(nonatomic,weak,nullable) UIView *owningView;

    layoutFrame是相对所属UIView的坐标的一块区域。获取最好的时机是在所属UIView的-layoutSubviews方法中

    说白了就是View的safeAreaLayoutGuide属性中的layoutFrame属性就是在以当前View的坐标系系统计算得到安全区域,在布局子控件是以这块安全区域为参照布局。避免子控件不能够完全显示的问题。

    对于如果使用AutoLayout布局可以这样写:

    对于使用Masonry框架布局

     

     可见API添加的UIView的safeAreaLayoutGuide属性用于自动布局参照, 保证所在子控件能够完全显示在父视图中。

    safeAreaInsets

    UIView的属性safeAreaLayoutGuide中的layouFrame可以认为是根据UIView的safeAreaInsets计算出来的,它表示UIView的安全区域相对当前View的内边距。

    与safeAreaLayoutGuide一样获取最好的在UIView的-layoutSubviews方法中

    对于控制器和UIView API分别提供了不同的回调方法监听View的safeAreaLayoutGuide改变 

     适配宏定义

    /** 当前系统版本判断 */
    #define iOS(version) ([UIDevice currentDevice].systemVersion.doubleValue >= (version))
    
    #define CHScreenW [UIScreen mainScreen].bounds.size.width
    #define CHScreenH [UIScreen mainScreen].bounds.size.height
    
    // 判断是否是刘海屏幕
    #define IS_LIUHAI_DEVIVE 
    ({
        BOOL INTERFACE_IS_IPHONEX = NO;
        if (@available(iOS 11.0, *)) {
            if([[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0) {
                INTERFACE_IS_IPHONEX = YES;
            }
    }
        INTERFACE_IS_IPHONEX;
    })
    
    // 底部安全区的高度
    #define  HT_TabbarSafeBottomMargin         (IS_LIUHAI_DEVIVE ? 34.f : 0.f)// Status bar & navigation bar height.
    // 状态栏高度
    #define  HT_StatusBarHeight      (IS_LIUHAI_DEVIVE ? 44.f : 20.f)
    // 导航栏高度
    #define  HT_NavigationBarHeight  44.f
    // TabBar高度
    #define  HT_TabbarHeight         (IS_LIUHAI_DEVIVE ? (49.f+HT_TabbarSafeBottomMargin) : 49.f)
    // 导航栏&状态栏
    #define  HT_StatusBarAndNavigationBarHeight  (HT_StatusBarHeight + HT_NavigationBarHeight)
  • 相关阅读:
    山东农户靠养殖山鸡致富,年纯收入达6万
    3个小鲜肉依托网购创业,现公司市值达477亿美元
    为什么劝你别去创业?大抵逃不掉这 101 个问题
    Python自动化运维一之psutil
    Python自动化运维一之psutil
    Python自动化运维一之psutil
    Python自动化运维一之psutil
    Gradle task简单使用
    Gradle task简单使用
    Gradle task简单使用
  • 原文地址:https://www.cnblogs.com/CoderHong/p/10915048.html
Copyright © 2011-2022 走看看