// 導(dǎo)航欄高度
#define kNavBarHeight \
({\
CGFloat height = 0.0;\
if (@available(iOS 11.0, *)) {\
UIEdgeInsets insets = [UIApplication sharedApplication].delegate.window.safeAreaInsets;\
height = insets.top > 0 ? 44.0 + insets.top : 44.0;\
} else {\
height = 64.0;\
}\
height;\
})
// 狀態(tài)欄高度
#define kStatusBarHeight \
({\
CGFloat height = 0.0;\
if (@available(iOS 11.0, *)) {\
UIEdgeInsets insets = [UIApplication sharedApplication].delegate.window.safeAreaInsets;\
height = insets.top;\
} else {\
height = 20.0;\
}\
height;\
})
// 標(biāo)簽欄高度
#define kTabBarHeight \
({\
CGFloat height = 0.0;\
if (@available(iOS 11.0, *)) {\
UIEdgeInsets insets = [UIApplication sharedApplication].delegate.window.safeAreaInsets;\
height = insets.bottom > 0 ? 49.0 + insets.bottom : 49.0;\
} else {\
height = 49.0;\
}\
height;\
})
// 安全區(qū)域底部高度
#define kSafeAreaBottomHeight \
({\
CGFloat height = 0.0;\
if (@available(iOS 11.0, *)) {\
UIEdgeInsets insets = [UIApplication sharedApplication].delegate.window.safeAreaInsets;\
height = insets.bottom;\
}\
height;\
})
上述代碼中,kNavBarHeight、kStatusBarHeight、kTabBarHeight和kSafeAreaBottomHeight宏定義了不同機(jī)型下導(dǎo)航欄、狀態(tài)欄、標(biāo)簽欄和安全區(qū)域底部的高度。如果當(dāng)前設(shè)備運(yùn)行的是 iOS 11 及以上系統(tǒng),則使用[UIApplication sharedApplication].delegate.window.safeAreaInsets來獲取安全區(qū)域的內(nèi)邊距(UIEdgeInsets類型),然后計算出各個高度。否則,使用默認(rèn)的高度。
這些宏定義可以涵蓋到各種不同機(jī)型,包括 iPhone X、iPhone XR、iPhone XS、iPhone XS Max、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max、iPhone 12、iPhone 12 Pro、iPhone 12 mini、iPhone 12 Pro Max、iPhone 13、iPhone 13 mini、iPhone 13 Pro、iPhone 13 Pro Max、iPhone 14、iPhone 14 mini、iPhone 14 Pro、iPhone 14 Pro Max等。