Swift獲取 iPhone 狀態(tài)欄、導航欄、TabBar高度

iOS 14 系統(tǒng)之后,劉海屏手機的狀態(tài)欄高度就不再統(tǒng)一是 44 了。下表是 iOS 15.2 上各劉海屏機型的狀態(tài)欄高度,其中 iPhone 13 系列和 iPhone 12 系列是一致的,就不再重復列舉。

機型 狀態(tài)欄高度
iPhone XR/11 48
iPhone X/11 Pro/ 11 Pro Max/12 mini 44
iPhone 12/12 Pro/Pro Max 47
// 系統(tǒng)預留的快速通道(判斷系統(tǒng)版本),推薦使用:
if #available(iOS 8.0, *) {
    //系統(tǒng)版本高于8.0
} else {
    //系統(tǒng)版本低于8.0
}

各種常用的命令宏:狀態(tài)欄高度等等(Objective-C、Swift)

下面??,就寫一個類擴展:

UIDevice+K_Addition.swift
extension UIDevice {
    
    /// 頂部安全區(qū)高度
    static func xp_safeDistanceTop() -> CGFloat {
        if #available(iOS 13.0, *) {
            let scene = UIApplication.shared.connectedScenes.first
            guard let windowScene = scene as? UIWindowScene else { return 0 }
            guard let window = windowScene.windows.first else { return 0 }
            return window.safeAreaInsets.top
        } else if #available(iOS 11.0, *) {
            guard let window = UIApplication.shared.windows.first else { return 0 }
            return window.safeAreaInsets.top
        }
        return 0;
    }
    
    /// 底部安全區(qū)高度
    static func xp_safeDistanceBottom() -> CGFloat {
        if #available(iOS 13.0, *) {
            let scene = UIApplication.shared.connectedScenes.first
            guard let windowScene = scene as? UIWindowScene else { return 0 }
            guard let window = windowScene.windows.first else { return 0 }
            return window.safeAreaInsets.bottom
        } else if #available(iOS 11.0, *) {
            guard let window = UIApplication.shared.windows.first else { return 0 }
            return window.safeAreaInsets.bottom
        }
        return 0;
    }
    
    /// 頂部狀態(tài)欄高度(包括安全區(qū))
    static func xp_statusBarHeight() -> CGFloat {
        var statusBarHeight: CGFloat = 0
        if #available(iOS 13.0, *) {
            let scene = UIApplication.shared.connectedScenes.first
            guard let windowScene = scene as? UIWindowScene else { return 0 }
            guard let statusBarManager = windowScene.statusBarManager else { return 0 }
            statusBarHeight = statusBarManager.statusBarFrame.height
        } else {
            statusBarHeight = UIApplication.shared.statusBarFrame.height
        }
        return statusBarHeight
    }
    
    /// 導航欄高度
    static func xp_navigationBarHeight() -> CGFloat {
        return 44.0
    }
    
    /// 狀態(tài)欄+導航欄的高度
    static func xp_navigationFullHeight() -> CGFloat {
        return UIDevice.xp_statusBarHeight() + UIDevice.xp_navigationBarHeight()
    }
    
    /// 底部導航欄高度
    static func xp_tabBarHeight() -> CGFloat {
        return 49.0
    }
    
    /// 底部導航欄高度(包括安全區(qū))
    static func xp_tabBarFullHeight() -> CGFloat {
        return UIDevice.xp_tabBarHeight() + UIDevice.xp_safeDistanceBottom()
    }
}

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容