4

我想在我的 iOS v5 通用应用程序中切换状态栏。

但发现似乎其他人有 UIViews(在我的情况下,子视图添加到主视图)如果然后旋转设备(我正在使用模拟器)仅回收隐藏状态栏留下的 20px

我的观点是以编程方式完成的。

我尝试了一些通过谷歌搜索找到的建议,但似乎都没有奏效。即在IB“使用全屏”中更改自动调整大小/掩码、wantsFullScreenLayout、setNeedsLayout。

我终于意识到我正在将我的视图 框架高度设置 为0,并将其边界高度设置为[[UIScreen mainScreen] applicationFrame] size.height

我想出的是:将视图框架高度设置 为-20,并将其边界高度设置为[[UIScreen mainScreen] applicationFrame] size.height+20

在 viewDidLoad 中。

CGRect theDeviceRect= [[UIScreen mainScreen] applicationFrame];
newMap.frame = CGRectMake(0, -20, theDeviceRect.size.width, theDeviceRect.size.height+20);

我在willAnimateRotationToInterfaceOrientation:委托中也有这个。

现在当我切换状态栏时:

- (void) toggleStatusBarAction:(id)sender{
  BOOL istathidden=  [[UIApplication sharedApplication] isStatusBarHidden];

   [[UIApplication sharedApplication] setStatusBarHidden:!istathidden withAnimation:UIStatusBarAnimationFade];
    }

一切都按预期工作。但我想看看我的解决方案是好是坏,以及我是否遗漏了什么?:

提前谢谢了。MH

4

1 回答 1

7

我要做的是:

在这段代码之后:

[[UIApplication sharedApplication] setStatusBarHidden:NO];

我立即执行:

CGRect originalFrame = self.view.frame;
originalFrame.origin.y = 20.0;
self.view.frame = originalFrame;

这会将框架“刷新”到正确的位置。不是最好的解决方案,但它有效。

在您的示例中,您可能需要根据 istathidden 将 y 动态设置为 0 或 20。

编辑于 2/SEP/2012: 关闭模式视图控制器时的更好解决方案:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
self.view.frame = [[UIScreen mainScreen] applicationFrame];
于 2012-01-07T09:19:07.280 回答