iOS 7中如何解决状态栏重叠问题

3
我正在开发一款在IOS6上良好运行的应用程序。但是在iOS7中,状态栏与视图重叠。
例如: IOS7 我需要先显示状态栏,然后显示我的图标和删除按钮。请给我任何有关如何消除重叠的想法。
但是我需要这样的效果: enter image description here 请给我任何解决问题的想法。
4个回答

5

Xcode 有 iOS 6/7 Delta 功能,可以特别解决这个问题。你需要将视图向下移动20个像素,以在 iOS 7 上呈现正确的效果,并为使其兼容 iOS 6,需要将 Delta y 更改为-20。

enter image description here

在 iOS 6 上适当调整视图的高度,您需要设置 Delta height 以及 Delta Y。

你也可以参考这篇文章 - 修复 iOS 7 状态栏重叠问题


Sonthos Sharma,谢谢您的回复,但我没有使用Story board。请给我一些想法。如何通过编程解决这个问题? - Pavan Alapati
可以不使用故事板。打开您的.xib文件,在取消自动布局选项后,您可以设置您的delta y。 - Santosh Sharma
您也可以查看此答案 - https://dev59.com/WGMl5IYBdhLWcg3wAC2h - Santosh Sharma

4
 -(void)viewWillLayoutSubviews{

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
  {
    self.view.clipsToBounds = YES;
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenHeight = 0.0;
    if(UIDeviceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation]))
        screenHeight = screenRect.size.height;
    else
        screenHeight = screenRect.size.width;
    CGRect screenFrame = CGRectMake(0, 20, self.view.frame.size.width,screenHeight-20);
    CGRect viewFr = [self.view convertRect:self.view.frame toView:nil];
    if (!CGRectEqualToRect(screenFrame, viewFr))
    {
        self.view.frame = screenFrame;
        self.view.bounds = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    }
  }
}

将以下代码添加到您的视图控制器中,如果您以编程方式添加,则会为您正常工作。如果您使用了导航栏,请使用Santhosh Dharma的代码,这样在使用xib或storyboard时就能很好地工作。 - Anbu.Karthik

1

尝试使用以下代码。将此代码用于您的AppDelegate.m文件中的didFinishLaunching方法中:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds =YES;
self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
}

谢谢回复,我按照您说的尝试了,但它只在MainViewControl视图上工作,其余视图不起作用。所以请给我任何想法。 - Pavan Alapati
请查看此链接:https://dev59.com/IGMk5IYBdhLWcg3wxAvy - Ganesh Kumar
你能检查一下你的UIViewController是否嵌入在UINavigationController中吗? - Ganesh Kumar
我没有添加导航控制器。 - Pavan Alapati
好的。尝试像这样添加到每个视图控制器中以解决问题:
  • (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; self.window.frame = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height - 20); }
- Ganesh Kumar
如果你的应用程序支持旋转,当你旋转设备时,这将会出现严重的错误。 - Cyrille

-1

iOS 7上UIViewController的默认行为是全屏显示,状态栏会覆盖在视图顶部。如果你隐藏了navigationBar,则需要通过将所有UIView元素向下移动20个点来进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接