Swift優(yōu)雅的判斷是否是劉海屏

最近蘋果爸爸出了一批新機(jī)型,于是開(kāi)始了一波新的適配工作.
很奇怪的是,我們自己App框架內(nèi)的基本不用怎么適配,反而是用到的第三方需要做適配.

很多框架都是通過(guò)判斷屏幕的長(zhǎng)寬來(lái)適配機(jī)型的,所以出了XR 與XS Max就跪了.

透過(guò)本質(zhì)看問(wèn)題才是解決問(wèn)題的關(guān)鍵

static var isFullScreen: Bool {
    if #available(iOS 11, *) {
          guard let w = UIApplication.shared.delegate?.window, let unwrapedWindow = w else {
              return false
          }
          
          if unwrapedWindow.safeAreaInsets.left > 0 || unwrapedWindow.safeAreaInsets.bottom > 0 {
              print(unwrapedWindow.safeAreaInsets)
              return true
          }
    }
    return false
}

首先,劉海屏在iOS 11之后才推出,而重中之重的是safeAreaInsets屬性

以下分別是豎屏與橫屏的時(shí)候,safeAreaInsets打印的值

UIEdgeInsets(top: 44.0, left: 0.0, bottom: 34.0, right: 0.0)
UIEdgeInsets(top: 0.0, left: 44.0, bottom: 21.0, right: 44.0)

其實(shí)單單判斷bottom > 0 這個(gè)屬性就完全可以解決問(wèn)題了

static var kNavigationBarHeight: CGFloat {
   //return UIApplication.shared.statusBarFrame.height == 44 ? 88 : 64
   return isFullScreen ? 88 : 64
}
    
static var kBottomSafeHeight: CGFloat {
   //return UIApplication.shared.statusBarFrame.height == 44 ? 34 : 0
   return isFullScreen ? 34 : 0
}

當(dāng)然如果只是想簡(jiǎn)單適配 特別是豎屏的話 下面這段代碼其實(shí)就能解決很多問(wèn)題

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容