Bin*_*man 0 objective-c ios ios6
我已经创建了一个UIViewController的自定义子类,其作用类似于UINavigationController或UITabBarController.我们称之为ToolbarNavController.它底部有一个工具栏,用户可以移动到不同的内容视图.
除了ToolbarNavController的视图外,我有两个内容视图.两者都是从笔尖加载并拥有自己的控制器.该应用程序开始显示其中一个.工具栏中的按钮允许用户在它们之间切换.
当我将这些视图添加为viewDidLoad中ToolbarNavController视图的子视图时,它们会被正确调整大小以填充状态栏和工具栏之间的区域,而不会重叠/重叠.
但是当我尝试延迟加载第二个视图时,仅在用户按下工具栏按钮时才将其添加为子视图,iOS不会调整视图大小以考虑其父视图中的工具栏,并且它会使工具栏重叠这搞砸了我的Autolayout限制.此外,当我没有在viewDidLoad中添加子视图时,如果我在切换到第二个视图之前将设备置于横向,则会加载纵向方向框.
结论:在viewDidLoad中插入子视图时,iOS会正确调整其大小并管理它的自动旋转.稍后插入时,我需要检测自己设置框架的方向.(出于某些原因,当我这样做时,自转再次开始).
到底是怎么回事?
在viewDidLoad中,视图还不是分辨率和界面方向的布局,视图属性与界面设计器中的一样.因此,如果您有纵向视图,那么在进入viewDidLoad时,这就是设置视图的初始属性的方式.在那里添加视图时,将其添加到XIB视图中.稍后,iOS会在视图层次结构上执行布局,从而根据需要调整插入视图的大小.但是在稍后添加视图时,视图层次结构已经是布局,因此预期正在添加的新视图也是正确布局的.
最佳做法是使用要插入的视图大小计算所需的大小.例如,包含视图宽度的一半,或边界的第三个等.这样,它与界面所在的方向无关.