当UITabBarController进入横向模式时隐藏statusBar

时间:2011-12-04 16:37:47

标签: iphone objective-c ios

我创建了 UITabBarController 的子类,以便在横向模式下隐藏 tabBar statusBar 。我成功实现了隐藏/显示tabBar的代码,但是stausBar让我发疯了。我当前的实现工作100%但不是第一次轮换,我无法弄清楚原因。 代码如下:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
  BOOL hide = (fromInterfaceOrientation == UIInterfaceOrientationPortrait || 
                         fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
  [[UIApplication sharedApplication] setStatusBarHidden:hide withAnimation:UIStatusBarAnimationNone];
  CGRect mainFrame = [[UIScreen mainScreen] applicationFrame];
  [self.view setFrame:mainFrame];
}

在练习第一次旋转我的iPhone时,statusBar正确隐藏,但框架不正确(顶部有20px的间隙)。如果我从这里返回到纵向视图,布局将按预期恢复,如果然后我在横向旋转第二次它将最终按预期工作(没有条形,像素完美布局!)......从这一点我可以旋转我的设备N次,视图将始终以正确的方式显示... 那么,为什么我的代码第一次失败?!

您可能需要的额外信息:

  • 根标签控制器是UINavigationControllers
  • 我的所有嵌套视图控制器都已正确配置以支持方向更改
  • 我正在使用iOS 5进行测试

2 个答案:

答案 0 :(得分:5)

我无法相信,但解决方案非常简单!我通过将didRotate中的 setStatusBarHidden:withAnimation:移动到willRotate ......来解决,实现如下:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
  BOOL show = (toInterfaceOrientation == UIInterfaceOrientationPortrait || 
                 toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
  [[UIApplication sharedApplication] setStatusBarHidden:!show withAnimation:UIStatusBarAnimationNone];
}

在我的情况下,没有必要对新帧进行硬编码,因为我的视图使用了自动调整大小的掩码... UIKit将自动正确地呈现视图...真棒:)

... +1给virushuo引用willRotateToInterfaceOrientation(我没有考虑到)

答案 1 :(得分:2)

尝试UINavigationController类方法setNavigationBarHidden:animated:in willRotateToInterfaceOrientation。

setNavigationBarHidden:动画: 设置是否隐藏导航栏。

  • (void)setNavigationBarHidden:(BOOL)隐藏动画:(BOOL)动画 参数 隐 指定YES以隐藏导航栏,或指定NO以显示它。 动画 如果要为可见性更改设置动画,请指定YES;如果希望导航栏立即显示,请指定NO。 讨论 对于动画过渡,动画的持续时间由UINavigationControllerHideShowBarDuration常量中的值指定。

状况 适用于iOS 2.0及更高版本。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html