0

我创建了 UIViewController 的自定义子类,其作用类似于 UINavigationController 或 UITabBarController。我们称它为 ToolbarNavController。它在底部有一个工具栏,用户可以通过控件移动到不同的内容视图。

除了 ToolbarNavController 的视图之外,我还有两个内容视图。两者都是从笔尖加载的,并有自己的控制器。该应用程序开始显示其中之一。工具栏中的按钮允许用户在它们之间切换。

当我在 viewDidLoad 中将这些视图添加为 ToolbarNavController 视图的子视图时,它们会正确调整大小以填充状态栏和工具栏之间的区域,而不会重叠/重叠。

但是当我尝试延迟加载第二个视图时,仅当用户按下工具栏按钮时才第一次将其添加为子视图,iOS 不会调整视图的大小以考虑其父视图中的工具栏,并且它会覆盖工具栏这弄乱了我的自动布局约束。此外,当我不在 viewDidLoad 中添加子视图时,如果我在切换到第二个视图之前将设备置于横向,它会加载纵向框架。

底线:在 viewDidLoad 中插入子视图时,iOS 会正确调整其大小并为其管理自动旋转。稍后插入时,我需要自己检测方向设置框架。(由于某种原因,当我这样做时,自动旋转又开始了)。

到底是怎么回事?

4

1 回答 1

5

在 viewDidLoad 中,视图尚未针对分辨率和界面方向进行布局,并且视图属性与界面设计器中的一样。所以,如果你有一个纵向视图,这就是在进入 viewDidLoad 时设置视图的初始属性的方式。当您在此处添加视图时,会将其添加到 XIB 视图中。稍后,iOS 在视图层次结构上执行布局,从而根据需要调整插入视图​​的大小。但是稍后添加视图时,视图层次结构已经布局,因此您添加的新视图也应该是正确布局的。

最佳做法是使用要插入的视图的大小来计算所需的大小。例如,包含视图的一半宽度,或边界的三分之一等。这样它就独立于界面所在的方向。

于 2012-11-02T16:46:20.787 回答