我有一个应用程序,有一个标签栏和导航栏,用于正常交互.我的一个屏幕是文本的很大一部分,所以我允许用户点击全屏(有点像Photos.app).
导航栏和标签栏被隐藏,我将文本视图的框架设置为全屏.问题是,标签栏曾经是大约50px的空白区域.你可以看看是否从这个屏幕截图:
删除了死的ImageShack链接
我不确定是什么导致了这个.空白绝对不是文本视图背后的视图,因为我将它的背景颜色设置为红色只是为了确定.可能是什么导致了这个?
**更新**
我在UIWindow子类中做了一些命中测试,发现空白实际上是未记录/未发布的UILayoutContainerView.这是tabBar的父视图.我不认为建议直接操作此视图,那么如何隐藏标签栏?
**更新#2**
我在动画之前和之后检查了self.view的帧,看起来父视图没有足够大小.
全屏后,视图的框架只有411像素高.我已经尝试手动搞乱框架,并设置autoResizeMask没有运气.
****更新:这是最终结果****
- (void)toggleFullscreen { isFullScreen = !isFullScreen; //ivar //hide status bar & navigation bar [[UIApplication sharedApplication] setStatusBarHidden:isFullScreen animated:YES]; [self.navigationController setNavigationBarHidden:isFullScreen animated:YES]; [UIView beginAnimations:@"fullscreen" context:nil]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:.3]; //move tab bar up/down CGRect tabBarFrame = self.tabBarController.tabBar.frame; int tabBarHeight = tabBarFrame.size.height; int offset = isFullScreen ? tabBarHeight : -1 * tabBarHeight; int tabBarY = tabBarFrame.origin.y + offset; tabBarFrame.origin.y = tabBarY; self.tabBarController.tabBar.frame = tabBarFrame; //fade it in/out self.tabBarController.tabBar.alpha = isFullScreen ? 0 : 1; //resize webview to be full screen / normal [webView removeFromSuperview]; if(isFullScreen) { //previousTabBarView is an ivar to hang on to the original view... previousTabBarView = self.tabBarController.view; [self.tabBarController.view addSubview:webView]; webView.frame = [self getOrientationRect]; //checks orientation to provide the correct rect } else { [self.view addSubview:webView]; self.tabBarController.view = previousTabBarView; } [UIView commitAnimations]; }
(请注意,我将textview切换为webview,但原始文本视图的工作方式相同)
我有这个确切的问题,我分别在屏幕的底部和顶部设置了标签栏和导航栏的动画,留下了标签栏所在的49px高的空白区域.
事实证明,我的新"全屏"视图实际上没有填充空间的原因是因为我将全屏视图添加为导航控制器视图的子视图,该视图本身是标签栏控制器的子视图.
为了解决这个问题,我简单地添加了新的全屏视图(在您的情况下,包含所有文本的视图)作为UITabBarController视图的子视图.
[[[self tabBarController] view] addSubview:yourTextView];
然后你需要做的就是确保你的子视图的框架是480 x 320px它应该填满屏幕(包括以前神秘的白色空间区域)
你可以通过移动视图的框架使标签栏不在屏幕上来制作看似正确的内容.我知道其他人提到尝试过这种情况,并且你说它不起作用,但我怀疑问题是当你尝试时你没有正确设置textviews resize mask.以下是应该工作的代码:
- (void)viewDidLoad { [super viewDidLoad]; currentlyHidden = NO; } - (void) hideStuff { SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate]; self.navigationController.navigationBarHidden = YES; CGRect newFrame = appDelegate.tabBarController.view.frame; newFrame.size.height += appDelegate.tabBarController.tabBar.frame.size.height; appDelegate.tabBarController.view.frame = newFrame; } - (void) showStuff { SO2AppDelegate *appDelegate = (id)[[UIApplication sharedApplication] delegate]; CGRect newFrame = appDelegate.tabBarController.view.frame; newFrame.size.height -= appDelegate.tabBarController.tabBar.frame.size.height; appDelegate.tabBarController.view.frame = newFrame; self.navigationController.navigationBarHidden = NO; } - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (currentlyHidden) { [self showStuff]; currentlyHidden = NO; } else { [self hideStuff]; currentlyHidden = YES; } }
另外,由于这对你的笔尖等设置非常敏感,我在网上发布了一个项目,所以你可以下载并查看它.这是一个非常小的演示,只是一个基于导航的项目,其中委托设置一个选项卡控制器并从主笔尖嵌入视图控制器.其余的是在RootViewController的nib和类中.只要触摸开始,就会切换条形,因此只需点击屏幕即可.显然,在真实的应用程序中,您可能需要调整滚动视图,以便内容看起来不会跳跃.