[英]CGImageSourceCreateThumbnailAtIndex() giving different results in iOS11 and iOS12
[英]Different return of safeAreaInset on iOS11 device without notch
目前我正在使用以下代碼段來獲取 safeAreaInset.top 值來為我的視圖設置約束。
extension UIDevice {
var safeAreaInsets: UIEdgeInsets {
if #available(iOS 11.0, *) {
if let keyWindow = UIApplication.shared.windows.filter({ $0.isKeyWindow}).first {
return keyWindow.safeAreaInsets
}
}
return UIEdgeInsets.zero
}
}
在具有 iOS 12 或更高版本的 iPhone 上,safeAreaInsets 似乎做得很好,為沒有缺口的設備返回UIEdgeInsets(20, 0, 0, 0)
為有缺口的設備UIEdgeInsets(47, 0, 34, 0)
。
但是在 iOS 11 上,safeAreaInset 始終為沒有缺口的設備返回UIEdgeInsets(0, 0, 0, 0)
。
我在沒有缺口的不同尺寸設備(iPhone7、iPhone8、iPhone8 Plus)上嘗試過,它們只在 iOS 11 版本(11.2、11.4 等)上返回UIEdgeInset(0, 0, 0, 0)
,但返回正確的UIEdgeInset(20, 0, 0, 0)
在其他 iOS 11+ 版本上。 (在帶有缺口的設備上,它們似乎為所有 iOS 11 或更高版本返回了正確的 safeAreaInset UIEdgeInset(47, 0, 34, 0)
。)
我的問題是,為什么 safeAreaInset 僅在沒有缺口的 iOS 11 設備上返回不同,以及獲取 safeAreaInset 的適當方法是什么。
首先在您的 AppDelegate 中聲明 window,如下所示:
var window: UIWindow?
您可以像這樣獲得 safeAreaInsets:
let _appDelegator = { return UIApplication.shared.delegate! as! AppDelegate }()
var _safeAreaInsets: UIEdgeInsets {
get {
if let window = _appDelegator.window{
return window.safeAreaInsets
}else if let vc = _appDelegator.window?.rootViewController{
return vc.view.safeAreaInsets
}
return UIEdgeInsets.zero
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.