Define A Marco with API Check(safeAreaInsets only available in iOS 11.0 or newer)

工程中有这样的一个宏定义:

define SafeAreaInsets [UIApplication sharedApplication].delegate.window.safeAreaInsets

对它的使用引起了警告:safeAreaInsets only available in iOS 11.0 or newer

查到这篇有用的帖子:https://stackoverflow.com/questions/47590978/how-to-define-a-macro-with-api-check

于是仿写了一个方法:
UIEdgeInsets KDSafeAreaInsets() {
if (@available(iOS 11.0, *)) {
return [UIApplication sharedApplication].delegate.window.safeAreaInsets;
}
return UIEdgeInsetsZero;
}

然后把宏定义改成:#define SafeAreaInsets KDSafeAreaInsets()

然而,方案被否决了。因为KDSafeAreaInsets()这个方法写在一个新建的工具类中。项目经理对引入新的类非常敏感,他建议我再想想办法。

最后改成了这样的宏:

define SafeAreaInsets \

({UIEdgeInsets edge;
if (@available(iOS 11.0, *)) { edge = UIEdgeInsetsZero; } else { edge = UIEdgeInsetsZero; }
(edge);
})

圆满解决问题。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、禁止手机睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa阅读 1,144评论 1 6
  • 1. 打印View所有子视图 po [[self view]recursiveDescription] 2. la...
    Hurricane_4283阅读 989评论 0 2
  • 打印View所有子视图 layoutSubviews调用的调用时机 当视图第一次显示的时候会被调用当这个视图显示到...
    hyeeyh阅读 524评论 0 3
  • 1. 打印View所有子视图 po [[self view]recursiveDescription] 2. la...
    浩成哥哥阅读 811评论 0 0
  • 元日 宋 王安石 爆竹声中一岁除, 春风送暖入屠苏。 千门万户曈曈日, 总把新桃换旧符。 每次读到这首诗,仿佛回到...
    月光明媚阅读 632评论 10 6