Ios 相同的视图控制器显示方式不同
我有两个子视图控制器,据我所知它们是相同的,但是其中一个的行为出乎意料 这两个子视图控制器分别称为Ios 相同的视图控制器显示方式不同,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有两个子视图控制器,据我所知它们是相同的,但是其中一个的行为出乎意料 这两个子视图控制器分别称为MenuLoggedInViewController和MenuLoggedOutViewController。其容器视图控制器具有以下代码: override func viewDidLoad() { super.viewDidLoad() // i comment out one of these two lines to produce the different result
MenuLoggedInViewController
和MenuLoggedOutViewController
。其容器视图控制器具有以下代码:
override func viewDidLoad() {
super.viewDidLoad()
// i comment out one of these two lines to produce the different results:
self.masterView = MenuLoggedOutViewController(nibName: "MenuLoggedOutViewController", bundle: nil)
// self.masterView = MenuLoggedInViewController(nibName: "MenuLoggedInViewController", bundle: nil)
self.detailView = RootViewController(nibName: "RootViewController", bundle: nil)
self.masterViewFrame = CGRectMake(0, 0, self.view.frame.width, 50)
self.detailViewFrame = CGRectMake(0, 50, self.view.frame.width, self.view.frame.height - 50)
self.addChildViewController(masterView!)
self.addChildViewController(detailView!)
self.view.addSubview(masterView!.view)
self.view.addSubview(detailView!.view)
masterView!.view.frame = masterViewFrame
// masterView!.view.bounds = masterViewFrame // - i tried this and it made no difference
detailView!.view.frame = detailViewFrame
}
MenuLoggedInViewController
和MenuLoggedOutViewController
在其swift文件中具有几乎相同的模板代码:
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
除了更改背景颜色外,我没有触摸.xib
文件。在检查了.xib
文件的设置之后,它们似乎都是相同的。如果我能帮忙的话,我不会靠近故事板,所以我对它不太熟悉。但是我花了很长时间仔细检查了两个.xib
文件的所有值,除了背景颜色之外,它们之间没有任何差异
MenuLoggedInViewController生成以下内容:“>
正如您所看到的,黑色的menulogedinViewController
紧贴着下面的白色视图控制器。这是有意的
MenuLoggedOutViewController生成以下命令:“>
灰色背景是包含视图控制器的颜色。正如您所看到的,黑色的菜单loggedoutviewcontroller
只会下降这么多
有谁能向我解释一下,尽管实际上完全相同,并且调用的代码也几乎相同,为什么菜单上的无法正确显示
需要注意的是,如果将屏幕旋转到一侧,然后再旋转回纵向,则菜单栏的视频控制器会自动进行校正。然后menulogedoutviewcontroller
看起来应该是这样的(就像menulogedingviewcontroller
)。很难准确地判断到底发生了什么。如果您真的愿意,我建议您使用NSStringFromCGRect
并检查各种frame
值,我怀疑您会看到发生了什么
但关键的概念问题是,此代码正在调整viewDidLoad
中的frame
值,但frame
值在该点上不可靠。我建议:
- 将子
帧
值的调整移动到视图将布局子视图
。此时,主视图的框架
是可靠的
- 如果使用自动布局,则根本不要设置
帧
值,而是将这两个子视图的设置TranslatesAutoResizengMaskintoConstraints
设置为false
,然后添加约束(可以在viewDidLoad
中执行),其VFL实际上是:
V:|[master(50)][detail]|
H:|[master]|
H:|[detail]|
作为最后一个不相关的细节,在调用addChildViewController
时,在添加完子视图后,不要忘记为每个子视图控制器调用didMoveToParentViewController
。非常好-我将框架代码放在viewWillLayoutSubviews
中,现在一切正常!非常感谢-感谢您提供的关于didMoveToParentViewController
的提示-完全忘了添加它!