我可能是错的,但在我看来,这种行为是正确的。容器视图控制器可以使用 topLayout 值来布局其视图的子视图。
参考资料说:
要在不使用约束的情况下使用顶部布局指南,请获取指南相对于包含视图的顶部边界的位置。
在父视图中,相对于包含视图,该值将为 64。
在子视图中,相对于包含视图(父视图),该值将为 0。
在容器视图控制器中,您可以通过以下方式使用该属性:
- (void) viewWillLayoutSubviews {
CGRect viewBounds = self.view.bounds;
CGFloat topBarOffset = self.topLayoutGuide.length;
for (UIView *view in [self.view subviews]){
view.frame = CGRectMake(viewBounds.origin.x, viewBounds.origin.y+topBarOffset, viewBounds.size.width, viewBounds.size.height-topBarOffset);
}
}
Child 视图控制器不需要知道有一个 Navigation 和一个 Status bar :它的父级已经考虑到了它的子视图。
如果我创建一个新的基于页面的项目,将其嵌入导航控制器,并将此代码添加到父视图控制器,它似乎工作正常: