iOS使用宏定義代碼塊獲取狀態(tài)欄高度

用宏定義代碼塊寫起來最整潔美觀,而且易于維護
//狀態(tài)欄
#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即可。

誤區(qū)一:使用宏定義函數(shù)實現(xiàn)
//定義狀態(tài)欄高度
#define STATUSBAR_HEIGHT \
({\
    @available(iOS 13.0, *) ? [[[UIApplication sharedApplication] windows] objectAtIndex:0].windowScene.statusBarManager.statusBarFrame.size.height : [[UIApplication sharedApplication] statusBarFrame].size.height;\
})

這種方法在調用時,與下面這句話一樣,都會有iOS 13的??出現(xiàn)

#define STATUSBAR_HEIGHT (@available(iOS 13.0, *)?[UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height:[UIApplication sharedApplication].statusBarFrame.size.height)
誤區(qū)二:使用預處理指令實現(xiàn)(這樣做并不省代碼,僅做參考)

預處理指令無法進行代碼的判斷。只能使用自帶的宏定義去判斷版本。
網(wǎng)上有些資料介紹,使用__IPHONE_OS_VERSION_MIN_REQUIRED 和__IPHONE_OS_VERSION_MAX_REQUIRED判斷。這樣是不正確的。
這兩句指的是開發(fā)支持的最低版本、最高版本。
例如在編譯時, 程序最低版本為iOS8, 那么__IPHONE_OS_VERSION_MIN_REQUIRED == 80000

#if __IPHONE_OS_VERSION_MIN_REQUIRED < 90000
    // 代碼1
    [UIView new];
#else
    // 代碼2, 這里調用了不存在的方法
    [UIView 不存在的方法];
#endif
參考資料:

1.iOS 使用宏定義函數(shù)和代碼塊 https://blog.csdn.net/wihatow/article/details/79093395
2.iOS pch中定義使用宏定義函數(shù)和代碼塊 http://www.itdecent.cn/p/db218bbfeca9
3.__IPHONE_OS_VERSION_MIN_REQUIRED 和 __IPHONE_OS_VERSION_MAX_ALLOWED http://www.itdecent.cn/p/ec295f92992d

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容