我创建了 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次,视图将始终以正确的方式显示... 那么,为什么我的代码第一次失败?!
您可能需要的额外信息:
答案 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:动画: 设置是否隐藏导航栏。
状况 适用于iOS 2.0及更高版本。