在处理自定义 UINavigationController 转换时,我注意到了一些有趣的事情:我在 fromController 中创建了一个 UIView 的副本,并将其添加到 transitionContext 以执行动画,但是 safeLayoutGuides/Insets 的值与从控制器。但是,它具有相似的边距,只是 safeAreaInsets 的数量不同:
if let fromController = transitionContext.viewController(forKey: .from) as? WTPTransformingHeaderController
{
// Make a copy of the from header
let header_FromCopy = fromController.view_Header.copy() as! WTPTransformingHeaderView
// fromController.view_Header.safeAreaLayoutInsets = UIEdgeInsets(top: 20.0, left: 0.0, bottom: 0.0, right: 0.0)
// fromController.view_Header.layoutMargins = UIEdgeInsets(top: 48.0, left: 8.0, bottom: 8.0, right: 8.0)
// header_FromCopy.safeAreaLayoutInsets = .zero
// header_FromCopy.layoutMargins = UIEdgeInsets(top: 28.0, left: 8.0, bottom: 8.0, right: 8.0)
}
UIView 究竟是如何设置这些属性的呢?在视图生命周期的哪个阶段?我猜它是由视图层次结构决定的,但我找不到细节。