当在UITabBarController框架中选择UIViewController时,视图会发生变化

时间:2011-09-26 19:20:06

标签: iphone uiviewcontroller uitabbarcontroller

我知道一个奇怪的问题。事情是UIVIewController的视图框架在UITabBarController中第一次显示时会发生变化。

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

在将UIViewControllers(A,B,C)的帧添加到UITabBarController的viewControllers数组之前,我会对其进行NSLog,结果为(0,20,320,460)。在显示它们的那一刻,它们的帧变为(0,0,320,411)。但ViewControlles A仍然可以呈现。其他两个不是:S

2 个答案:

答案 0 :(得分:2)

必须看到一些代码才能确切地知道问题是什么,但与此同时你应该做的是在viewController的viewWillAppear方法中设置子视图并使用BOOL来确保它们只设置一次(不是每次调用viewWillAppear方法时)。这应该确保子视图与正确的框架匹配。

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

答案 1 :(得分:0)

将视图添加到tabBar数组后,帧高可能会发生变化。标准tabBar的高度为49px,这是您在日志中看到的高度值的差异。这是有道理的,因为每个视图都会调整为适合可用的屏幕大小,减去tabBar的大小。

您是如何以编程方式或IB设置视图的?你用的是什么尺码?如果您通过编程方式或通过IB设置帧,但不考虑tabBar的偏移量,则可能会丢弃视图的放置位置。看一些代码会很有帮助,但是没有任何代码,我建议你检查一下如何调整标签栏的框架。