Iphone 在UIDABBARCONTROLLER中选择UIViewController时,视图框架会发生更改

Iphone 在UIDABBARCONTROLLER中选择UIViewController时,视图框架会发生更改,iphone,uiviewcontroller,uitabbarcontroller,Iphone,Uiviewcontroller,Uitabbarcontroller,据我所知,我遇到了一个奇怪的问题。问题是,UIVIewController的视图框架在UIAbbarController中第一次显示时会发生变化 我将尝试描述我的架构。 我有一个类是UITabController的子类。在这个类中,我创建了3个UIViewController(A、B、C),然后将它们放在UIAbbarController的ViewController数组中。 UITabBarController的SELECTED索引设置为0,因此A是第一个显示的索引。在视图A中,所有东西都正常

据我所知,我遇到了一个奇怪的问题。问题是,UIVIewController的视图框架在UIAbbarController中第一次显示时会发生变化

我将尝试描述我的架构。 我有一个类是UITabController的子类。在这个类中,我创建了3个UIViewController(A、B、C),然后将它们放在UIAbbarController的ViewController数组中。 UITabBarController的SELECTED索引设置为0,因此A是第一个显示的索引。在视图A中,所有东西都正常渲染。但当我切换到第二视图B或第三视图C时,每个子视图帧都会以某种方式被破坏。改变尺寸和位置


在将UIViewControllers(A、B、C)的帧添加到UIAbbarController的viewControllers数组之前,我先记录这些帧,结果是(0,20320460)。在显示它们时,它们的帧将更改为(0,0320411)。但ViewControlles仍然渲染OK。其他两个not:S

必须查看一些代码才能确切了解问题所在,但与此同时,您应该在viewController的ViewWillAspect方法中设置子视图,并使用BOOL确保它们只设置一次(而不是每次调用ViewWillAspect方法时)。这应确保子视图与正确的框架匹配

-(void)viewWillAppear {
if (!viewWasAlreadySetUpBOOL) {
//setup all the views
viewWasAlreadySetUpBOOL = YES;
}
}

在将视图添加到选项卡栏阵列后,框架高度可能会发生变化,这是有道理的。标准选项卡栏的高度为49px,这是您在日志中看到的高度值的差异。这是有意义的,因为每个视图都会调整以适应可用的屏幕大小,减去选项卡栏的大小


您是如何以编程方式或IB方式设置视图的?你用什么尺寸的?如果以编程方式或通过IB设置框架,但不考虑与选项卡栏的偏移,则可能会偏离视图的放置位置。查看一些代码会有所帮助,但如果没有代码,我建议您检查一下如何调整选项卡栏的框架。

Thx,但我认为这并不能解决我的问题。在将UIViewController的子视图添加到UIAbbarController的viewControllers数组之前,我只设置了一次UIViewController的子视图。我一点也不喜欢这个方法,我知道。使用我描述的-(void)viewWillAspect方法,看看会发生什么。它只为每个viewController设置一次视图(这就是bool的用途)。我过去也遇到过类似的问题,这很有效。有趣。好的,我会尽量让你知道的。谢谢