在推入导航控制器的控制器中添加子视图控制器

时间:2016-02-02 12:01:46

标签: ios objective-c swift uiviewcontroller containers

我有一个名为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)

如果我将导航栏设置为半透明,则视图显示正确,如下所示: enter image description here

但是当我将导航栏设置为半透明假时,发生了一些奇怪的事情。 enter image description here

发生了什么。如何解决这个问题? 该项目很简单,您也可以从这里下载来测试问题:download

2 个答案:

答案 0 :(得分:2)

您要在viewDidLoad中设置视图框,请注意视图布局要到很晚才能完成。分别在布局发生之前和之后调用viewWillLayoutSubviewsviewDidLayoutSubviews

将您的框架设置代码移至viewDidLayoutSubviews,它将正常工作。

注意::您也可以在viewWillAppear中设置视图的框架,但这是设置框架的正确位置。在视图即将出现之前调用viewWillAppear,视图布局可在视图出现后更改(例如,响应设备旋转)。

答案 1 :(得分:2)

问题原因默认为UIViewControllerviewFlexibleWidth& FlexibleHeight

bControllercController的{​​{1}}有额外的差距64像素(navBar(44)+状态栏(20))。现在,当您调整大小时,可以使用“FlexibleWidth view FlexibleHeight”。

解决方案可能是&autoresizingMask

.None