如何在 viewWillTransitionToSize (iPhone X) 中获取 safeAreaInsets
How to get safeAreaInsets in viewWillTransitionToSize (iPhone X)
我正在尝试更新 iPhoneX 的 viewWillTransition(to size: with coordinator:)
方法。
但是我无法获取 safeAreaInsets 值的目的地。
请帮忙!
override func viewWillTransition(to size: CGSize,
with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
if #available(iOS 11.0, *) {
if let window = UIApplication.shared.keyWindow {
let insets = window.safeAreaInsets
contentFrame = CGRect(x:insets.left, y:insets.top,
width:size.width - insets.left - insets.right,
height:size.height - insets.top - insets.bottom)
}
} else {
contentFrame = CGRect(x:0,y:0,width:size.width, height:size.height)
}
self.updateViews()
}
我在 Whosebug Japan 得到了有效的解决方案。
它只是在 UIViewControllerTransitionCoordinator.animate(alongsideTransition:completion:)
闭包中获取插图,如下所示:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { (context) in
...
let insets = ...safeAreaInsets
...
}, completion: nil)
}
我也有这个问题。试验后,我发现了一个很好的解决方法,无需等待转换完成。
- 有一个视图(我们称它为
SizeListenerView
)锚定到安全区域,这样我们只需要监听这个视图的大小变化
在SizeListenerView
override var bounds: CGRect {
didSet {
// now you can access the bounds here
}
}
我正在尝试更新 iPhoneX 的 viewWillTransition(to size: with coordinator:)
方法。
但是我无法获取 safeAreaInsets 值的目的地。
请帮忙!
override func viewWillTransition(to size: CGSize,
with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
if #available(iOS 11.0, *) {
if let window = UIApplication.shared.keyWindow {
let insets = window.safeAreaInsets
contentFrame = CGRect(x:insets.left, y:insets.top,
width:size.width - insets.left - insets.right,
height:size.height - insets.top - insets.bottom)
}
} else {
contentFrame = CGRect(x:0,y:0,width:size.width, height:size.height)
}
self.updateViews()
}
我在 Whosebug Japan 得到了有效的解决方案。
它只是在 UIViewControllerTransitionCoordinator.animate(alongsideTransition:completion:)
闭包中获取插图,如下所示:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { (context) in
...
let insets = ...safeAreaInsets
...
}, completion: nil)
}
我也有这个问题。试验后,我发现了一个很好的解决方法,无需等待转换完成。
- 有一个视图(我们称它为
SizeListenerView
)锚定到安全区域,这样我们只需要监听这个视图的大小变化
在SizeListenerView
override var bounds: CGRect {
didSet {
// now you can access the bounds here
}
}