设置setStatusBarHidden:在iOS v5应用程序中.还有一个空白区域.这是解决问题的正确方法吗?

mar*_*nte 4 objective-c uiview uiapplication ios

我想在我的iOS v5通用应用程序中切换statusBar.

但发现其他人有UIViews(在我的情况下,subViews添加到主视图)只回收隐藏statusBar剩下的20px,如果你然后旋转设备(我使用模拟器)

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

我尝试了通过谷歌搜索找到的一些建议,但似乎没有任何工作.即更改autoresizing/mask,wantsFullScreenLayout,setNeedsLayout,在IB'使用全屏.

我终于意识到我将视图框架高度设置 为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);
Run Code Online (Sandbox Code Playgroud)

我也在willAnimateRotationToInterfaceOrientation: delegate中有这个.

现在当我切换状态栏时:

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

   [[UIApplication sharedApplication] setStatusBarHidden:!istathidden withAnimation:UIStatusBarAnimationFade];
    }
Run Code Online (Sandbox Code Playgroud)

一切都按预期工作.但是我想看看我的解决方案是好坏的方式,如果我遗失了什么?:

提前谢谢了.MH

Way*_*Liu 7

我所做的是:

在这段代码之后:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
Run Code Online (Sandbox Code Playgroud)

我马上执行:

CGRect originalFrame = self.view.frame;
originalFrame.origin.y = 20.0;
self.view.frame = originalFrame;
Run Code Online (Sandbox Code Playgroud)

这会使框架"刷新"到正确的位置.不是最好的解决方案,但它确实有效.

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

编辑于2012年9月2日: 解雇模态视图控制器时的更好解决方案:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
self.view.frame = [[UIScreen mainScreen] applicationFrame];
Run Code Online (Sandbox Code Playgroud)