只有viewDidLoad中添加的子视图会自动调整大小

时间:2012-11-02 05:55:29

标签: objective-c ios ios6

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

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

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

但是当我尝试延迟加载第二个视图时,仅在用户按下工具栏按钮时才将其添加为子视图,iOS不会调整视图大小以考虑其父视图中的工具栏,并且重置工具栏会影响我的Autolayout约束。另外,当我没有在viewDidLoad中添加子视图时,如果我在切换到第二个视图之前将设备置于横向,则会加载纵向方向框。

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

发生了什么事?

1 个答案:

答案 0 :(得分:5)

在viewDidLoad中,视图还不是分辨率和界面方向的布局,视图属性与界面设计器中的一样。因此,如果您有纵向视图,那么在进入viewDidLoad时,这就是设置视图的初始属性的方式。在那里添加视图时,将其添加到XIB视图中。稍后,iOS会在视图层次结构上执行布局,从而根据需要调整插入视图​​的大小。但是在稍后添加视图时,视图层次结构已经是布局,因此预期您添加的新视图也是正确布局的。

最佳做法是使用要插入的视图大小计算所需的大小。例如,包含视图的宽度的一半,或边界的第三,等等。这样,它与界面所在的方向无关。