我的iphone应用程序在旋转时显示出奇怪的行为:标签栏视图内的导航标题和内容视图之间出现间隙(有关如何重现的详细信息如下)。我创建了一个小小的测试用例,它展示了相同的问题:一个自定义的根UIViewController,它以编程方式创建并显示一个UITabBarController,它具有两个选项卡:1)简单的UIViewController; 2)UINavigationController,通过一个简单的UIViewController内容视图。旋转和制表符切换后在导航栏和视图之间出现间隙
该应用程序的完整代码位于根控制器的viewDidLoad中(每个“* VC”类都是XIB用于XCode用户界面的完全香草的UIViewController子类,仅更改了视图背景颜色以清楚地标识每个视图,没有其他的)。
这里的viewDidLoad中的代码,以及shouldAutorotateToInterfaceOrientation代码,这个代码基本上是整个应用程序:
- (void)viewDidLoad {
[super viewDidLoad];
FirstVC *fvc = [[FirstVC alloc] initWithNibName:@"FirstVC" bundle:nil];
NavContentsVC *ncvc = [[NavContentsVC alloc] initWithNibName:@"NavContentsVC" bundle:nil];
UINavigationController *svc = [[UINavigationController alloc] initWithRootViewController:ncvc];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
[localControllersArray addObject:fvc];
[localControllersArray addObject:svc];
fvc.title = @"FirstVC-Title";
ncvc.title = @"NavContents-Title";
UITabBarController *tbc = [[UITabBarController alloc] init];
tbc.view.frame = CGRectMake(0, 0, 320, 460);
[tbc setViewControllers:localControllersArray];
[self.view addSubview:tbc.view];
[localControllersArray release];
[ncvc release];
[svc release];
[fvc release];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
下面是如何重现该问题:
1)启动应用程序
2) (UITabBar正确旋转)
3)点击标签页2
4)将设备旋转到肖像 - 通知导航标题栏和导航内容视图下方的根视图控制器的背景颜色高10个像素左右。
5)单击标签1
6)单击选项卡2
而且差距了!从我的真实应用程序中,我发现在导航控制器选项卡处于活动状态时,所有VC推送和弹出窗口都会保持空白。切换到不同的选项卡并返回导航选项卡可清除间隙。
我在做什么错?我在SDK 3.1.3上运行,这在模拟器和设备上都会发生。除了这个特定的序列,一切似乎都很好。帮帮我!
要么,或问题是的UITabBarController不根控制器本身。我在使用“自定义”根视图控制器时遇到了很多旋转问题。我已经停止了这样做,并已决定使用UITabBarController或UINavigationController作为我的应用程序的主根控制器,并实现“特殊”启动屏幕作为模式VC“立即”弹出(没有动画),然后是与动画解散。 – Bogatyr 2010-12-30 09:21:29