美文网首页iOS假装进步
iOS使用宏定义代码块获取状态栏高度

iOS使用宏定义代码块获取状态栏高度

作者: 左方 | 来源:发表于2020-11-16 15:31 被阅读0次
    用宏定义代码块写起来最整洁美观,而且易于维护
    //状态栏
    #define STATUSBAR_HEIGHT \
    ^(){\
    if (@available(iOS 13.0, *)) {\
        UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager;\
        return statusBarManager.statusBarFrame.size.height;\
    } else {\
        return [UIApplication sharedApplication].statusBarFrame.size.height;\
    }\
    }()
    
    //底部指示条
    #define INDICATOR_HEIGHT \
    ^(){\
    if (@available(iOS 11.0, *)) {\
        UIEdgeInsets safeAreaInsets = [[UIApplication sharedApplication] delegate].window.safeAreaInsets;\
        return safeAreaInsets.bottom;\
    } else {\
        return UIEdgeInsetsMake(0, 0, 0, 0).bottom;\
    }\
    }()
    

    使用的时候调用STATUSBAR_HEIGHT即可。

    误区一:使用宏定义函数实现
    //定义状态栏高度
    #define STATUSBAR_HEIGHT \
    ({\
        @available(iOS 13.0, *) ? [[[UIApplication sharedApplication] windows] objectAtIndex:0].windowScene.statusBarManager.statusBarFrame.size.height : [[UIApplication sharedApplication] statusBarFrame].size.height;\
    })
    

    这种方法在调用时,与下面这句话一样,都会有iOS 13的⚠️出现

    #define STATUSBAR_HEIGHT (@available(iOS 13.0, *)?[UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height:[UIApplication sharedApplication].statusBarFrame.size.height)
    
    误区二:使用预处理指令实现(这样做并不省代码,仅做参考)

    预处理指令无法进行代码的判断。只能使用自带的宏定义去判断版本。
    网上有些资料介绍,使用__IPHONE_OS_VERSION_MIN_REQUIRED 和__IPHONE_OS_VERSION_MAX_REQUIRED判断。这样是不正确的。
    这两句指的是开发支持的最低版本、最高版本。
    例如在编译时, 程序最低版本为iOS8, 那么__IPHONE_OS_VERSION_MIN_REQUIRED == 80000

    #if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
        // 代码1
        [UIView new];
    #else
        // 代码2, 这里调用了不存在的方法
        [UIView 不存在的方法];
    #endif
    
    参考资料:

    1.iOS 使用宏定义函数和代码块 https://blog.csdn.net/wihatow/article/details/79093395
    2.iOS pch中定义使用宏定义函数和代码块 https://www.jianshu.com/p/db218bbfeca9
    3.__IPHONE_OS_VERSION_MIN_REQUIRED 和 __IPHONE_OS_VERSION_MAX_ALLOWED https://www.jianshu.com/p/ec295f92992d

    相关文章

      网友评论

        本文标题:iOS使用宏定义代码块获取状态栏高度

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