[英]Add children view controller in a controller that pushed in a navigation controller
我有一个名为ViewController的简单视图控制器,它位于导航堆栈中,其结构如下所示:
UINavigationControlelr
UIViewController
ViewController
ViewController有一个称为a的子视图控制器,我在ViewController中添加了一个,其框架是ViewController的边界。 我还有两个UIViewController,分别称为b和c,我将b和c添加到了a中。 b的框架是
CGRect(x: 0, y: 0, width: 100, height: 100)
c的框架是
CGRect(x: 0, y: 100, width: 100, height: 100)
如果将导航栏半透明设置为true,则视图显示为正确,如下所示:
但是,当我将导航栏半透明设置为false时,发生了一些奇怪的事情。
这是怎么回事。 如何解决这个问题? 该项目很简单,您也可以从这里下载以测试问题: 下载
您正在viewDidLoad
中设置视图框架,请注意,视图布局要等到很久以后才能完成。 在布局发生之前和之后分别调用viewWillLayoutSubviews
和viewDidLayoutSubviews
)。
将您的框架设置代码移动到viewDidLayoutSubviews
,它将正常工作。
注意::您也可以在viewWillAppear
设置视图的框架,但这是设置框架的正确位置。 viewWillAppear
在视图即将出现之前被调用,视图布局可以在视图出现后改变(例如,响应于设备旋转)。
问题的
原因是默认情况下, UIViewController
的view
具有FlexibleWidth
和FlexibleHeight
bController
和cController
的view
有64像素的额外间隙(navBar(44)+状态栏(20))。 现在,当您调整大小时,可以使用那些“ FlexibleWidth &
FlexibleHeight”。
解决方法可能是将autoresizingMask
为.None
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.greenColor()
bController = b()
cController = c()
bController.view.autoresizingMask = .None
cController.view.autoresizingMask = .None
displayContentController(bController, toFrame: CGRect(x: 0, y: 0, width: 100, height: 100))
displayContentController(cController, toFrame: CGRect(x: 0, y: 100, width: 100, height: 100))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.