我有一个scrollView包含2个子viewController。你可以看到VC2没有正确布局。
我发现屏幕上还没有显示视图。
safeAreaInsets
始终为0.
滚动结束时,我可以调用vc2.view.setNeedsLayout()
来解决此问题。
但滚动结束前布局不正确。
如果视图当前未安装在视图层次结构中,或者不是 但在屏幕上可见,此属性中的边缘插入为0。
那么我该如何解决这种情况。
答案 0 :(得分:8)
而不是引用当前视图的safeAreaInsets,将其设置为UIApplication:
(UIApplication.shared.delegate?.window??.safeAreaInsets.bottom)
答案 1 :(得分:1)
在子视图控制器中,如果将视图控制器System.Windows.Forms
设置为等于窗口的安全区域插图,则它们将按照安全区域正确布局。
我发现我必须在additionalSafeAreaInsets
和viewDidLoad()
内这样做
在viewWillTransition(to size: CGSize, with coordinator: UIVIewControllerTransitionCoordinator
内,您需要在协调器的动画块中设置viewWillTransition
:
additionalSafeAreaInsets
答案 2 :(得分:1)
我正在构建一个自定义分页视图控制器,并遇到了@PowHU这个问题。
对我来说唯一可行的解决方案是将故事板中的视图控制器的视图类设置为我创建的名为AlwaysSafeAreaInsetsView
的自定义类。
import UIKit
class AlwaysSafeAreaInsetsView: UIView {
@available(iOS 11.0, *)
override var safeAreaInsets: UIEdgeInsets {
if let window = UIApplication.shared.keyWindow {
return window.safeAreaInsets
}
return super.safeAreaInsets
}
}
答案 3 :(得分:0)
如果我看得正确,您的容器视图会固定在它的超级视图的顶部和底部。将其固定到安全区域,您的子视图控制器将正确布局。