Swift优雅的判断是否是刘海屏
2018-09-30 本文已影响10人
seasonZhu
最近苹果爸爸出了一批新机型,于是开始了一波新的适配工作.
很奇怪的是,我们自己App框架内的基本不用怎么适配,反而是用到的第三方需要做适配.
很多框架都是通过判断屏幕的长宽来适配机型的,所以出了XR 与XS Max就跪了.
透过本质看问题才是解决问题的关键
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属性
以下分别是横屏与竖屏的时候,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)
其实单单判断bottom > 0 这个属性就完全可以解决问题了
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
}
当然如果只是想简单适配 特别是竖屏的话 下面这段代码其实就能解决很多问题
UIApplication.shared.statusBarFrame.height == 44