工程中有這樣的一個宏定義:
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()這個方法寫在一個新建的工具類中。項目經(jīng)理對引入新的類非常敏感谴麦,他建議我再想想辦法垂涯。
最后改成了這樣的宏:
define SafeAreaInsets \
({UIEdgeInsets edge;
if (@available(iOS 11.0, *)) { edge = UIEdgeInsetsZero; } else { edge = UIEdgeInsetsZero; }
(edge);
})
圓滿解決問題膜毁。