我的代碼我的坑(十三) —— 狀態欄高度的動態計算(一) 版本記錄 前言 問題描述 問題解決 後記

版本記錄

版本號 時間
V1.0 2021.04.11 星期日

前言

做了好幾個APP,碰到了大大小小的很多坑,以前碰到坑,解決了就結束了,這裏想把自己碰到的坑記錄下來,一來給自己備查二來希望可以幫助到大家。感興趣的可以關注下,也歡迎大家補充留言,感興趣的看上面幾篇文章。
1. 我的代碼我的坑(一) —— 自簽名證書導致請求取消的問題(一)
2. 我的代碼我的坑(二) —— UIImageView動畫點擊後動畫和圖片消失的問題(一)
3. 我的代碼我的坑(三) —— iOS9系統WKWebView加載頁面白板的問題(一)
4. 我的代碼我的坑(四) —— iOS12系統自定義漸變色UISwitch手機橫屏的異常問題(一)
5. 我的代碼我的坑(五) —— 不可編輯狀態的UITextView文本高度大於視圖高度默認滾動到底部的問題(一)
6. 我的代碼我的坑(六) —— UITextField輸入長度自動截取時漢字和拼音帶來的末位截取不能正常輸入漢字的問題(一)
7. 我的代碼我的坑(七) —— UIImageView做序列幀動畫結束後沒有回調並且“隱藏”(一)
8. 我的代碼我的坑(八) —— iOS 13.1.2 Debug調試模式系統layoutSubviews中修改frame循環調用導致的崩潰(一)
9. 我的代碼我的坑(九) —— 系統鍵盤拼音全鍵無法正常聯想以及輸入漢字高亮區識別不計入長度計數的問題(一)
10. 我的代碼我的坑(十) —— iOS9 Xib實例化的UITableViewCell中UIButton和UISwitch等控件的IBAction點擊無響應的問題(一)
11. 我的代碼我的坑(十一) —— macOS Mojave 和 xcode 11.1 (11A1027)環境下運行iphonex以上流海屏xcode install時xocde崩潰閃退的問題(一)
12. 我的代碼我的坑(十二) —— iOS10字體DIN Condense Bold字體顯示不全頂部被切割的問題(一)

問題描述

自從17年iphoneX出現以後,以前狀態欄都是寫死的20iphoneX的狀態欄高度爲44。以爲就到此爲止了,但是隨着機型越來越多,不同機型和系統的狀態欄高度不再是44或者20,而是有更多不同的高度,比如說:

  • iphone 11手機iOS 14.3系統狀態欄高度是48
  • iphone 12手機iOS 14系統狀態欄的高度是44
  • iphone 12mini手機 iOS 14.1系統狀態欄的高度是50

問題解決

由於有上面的幾個問題,所以以後這種狀態欄的計算就不能在用宏定義枚舉進行取值了,最好的方案就是通過系統的API進行取值,直接讀取狀態欄的高度。

具體實現方案有很多,其中一種可以是寫一個UIDevice的一個分類,在裏面進行處理。

- (BOOL)isLiuHaiScreen {
    if (@available(iOS 11.0, *)) {
        return UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPhone && UIApplication.sharedApplication.delegate.window.safeAreaInsets.bottom > 0.0;
    } else {
        return NO;
    }
}
+ (CGFloat)getStatusBarHeight{
    CGFloat statusBarHeight = 0.0;
    // 注意:狀態欄隱藏的時候,此方式獲取的高度爲0
    if (@available(iOS 13.0, *)) {
        statusBarHeight = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFrame.size.height;
    } else {
        statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
    }
     
    if (statusBarHeight <= 0) {
        if (@available(iOS 11.0, *)) {
            UIWindow *window = [UIApplication sharedApplication].windows.firstObject;
            if ([window respondsToSelector:@selector(safeAreaInsets)]) {
                statusBarHeight = window.safeAreaInsets.top;
            }
        }
    }
    
    //這個是兜底的,做保護
    if (statusBarHeight <= 0) {
        statusBarHeight = [self currentDevice].isLiuHaiScreen ? 44 : 20;
    }
    
    return statusBarHeight;
}

後記

本篇主要講述了狀態欄高度的動態計算,感興趣的給個贊或者關注~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章