我有一个名为ViewController的简单视图控制器,它位于导航堆栈中,结构如下:
UINavigationControlelr
UIViewController
ViewController
ViewController有一个名为a的子视图控制器,我向ViewController添加了一个框架,它的框架是ViewController的边界。我有另外两个名为b和c的UIViewController,我将b和c添加到a。 b的框架是
CGRect(x: 0, y: 0, width: 100, height: 100)
c的框架是
CGRect(x: 0, y: 100, width: 100, height: 100)
发生了什么。如何解决这个问题? 该项目很简单,您也可以从这里下载来测试问题:download
答案 0 :(得分:2)
您要在viewDidLoad
中设置视图框,请注意视图布局要到很晚才能完成。分别在布局发生之前和之后调用viewWillLayoutSubviews
和viewDidLayoutSubviews
。
将您的框架设置代码移至viewDidLayoutSubviews
,它将正常工作。
注意::您也可以在viewWillAppear
中设置视图的框架,但这是设置框架的正确位置。在视图即将出现之前调用viewWillAppear
,视图布局可在视图出现后更改(例如,响应设备旋转)。
答案 1 :(得分:2)
问题原因默认为UIViewController
,view
有FlexibleWidth
&
FlexibleHeight
bController
和cController
的{{1}}有额外的差距64像素(navBar(44)+状态栏(20))。现在,当您调整大小时,可以使用“FlexibleWidth view
FlexibleHeight”。
解决方案可能是&
到autoresizingMask
.None