我在app delegate中启动应用程序时使用多个控制器。一个控制器用于注册,第二个控制器用于标签栏。 tabbar正在加载正常,但当我在窗口上推注册控制器时,内容上升了20个单位,我在底部有好的白色空白屏幕。因此,我在其viewdidload方法中重新创建了我的注册视图控制器的框架,并向下滑动了20个单元。代码是
self.view.frame = CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
我的应用程序委托代码中的代码是
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (![self accountExists]) {
//code if account does not exists on iphone app database
self.registerAccount = [[registerViewController alloc] initWithNibName:@"registerViewController" bundle:nil];
[window addSubview:registerAccount.view];
}
else if([self autoLoginForAnyAccount]){
//code for autologin to app
}
else {
self.tabBarController.selectedIndex = 1;
self.tabBarController.delegate = self;
[window addSubview:tabBarController.view];
}
[window makeKeyAndVisible];
return YES;
}
如果有人知道为什么在推出注册控制器时底部有空白区域,那么请与我分享。
答案 0 :(得分:3)
最近,我遇到了同样的问题。在推荐了如此多的博客和Q& A论坛,我发现空白区域问题是由于框架设置不当造成的。
以下是解决方案,在我这方面非常好......
[self.view setFrame:CGRectMake(0,0, self.view.bounds.size.width, self.view.bounds.size.height)];
希望,这会帮助你。
此致 iApple。
答案 1 :(得分:1)
我找出了问题,但不是原因。问题是窗口的大小,即在我的代码中我创建了registerViewController的实例,因此它的大小是窗口的大小减去状态栏的大小(因为它是一个必须显示在状态栏下方的视图控制器)。当我将registerViewController推入窗口时,由于某种原因(我不知道为什么)视图控制器无法识别标题中的状态栏,并且registerViewController的20px显示在状态栏后面。然后我尝试了代码registerAccount.view.frame = window.frame;
,它将我的注册控制器的帧设置为等于窗口控制器。这删除了底部的空白屏幕,现在查看整个窗口大小,但仍然20px落后于状态栏,因为我的视图控制器看不到状态栏。我试图使用在屏幕上显示我的整个控制器的代码删除状态栏,但我也想在顶部显示状态栏。
我通过在mainWindow.xib文件中添加UIViewcontroller对象来解决问题(就像我的标签栏控制器一样),我将其类指向registerViewController并加载了registerViewController的nib。我还删除了行self.registerAccount = [[registerViewController alloc] initWithNibName:@"registerViewController" bundle:nil];
并在我的委托.h文件registerViewController *registerAccount;
中替换为UIViewController *registerAccount;
,在mainWindow.xib文件中,我将新添加的视图控制器指向此控制器。现在everthing工作正常但我仍然不知道为什么当我推送registerViewController的实例时,viewcontroller无法看到状态栏。
如果有人知道原因,请与我分享。