最近蘋果爸爸出了一批新機(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