IOS7中的状态栏和导航栏问题

Gan*_*thy 57 uinavigationcontroller ipad ios ios7

我正在将我的应用程序迁移到iOS 7.为了处理状态栏问题,我添加了此代码

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
{
    CGRect frame = self.navigationController.view.frame;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        frame.origin.y = 20;
    }
    else
    {
        frame.origin.x = 20;
    }
    [self.navigationController.view setFrame:frame];
}
Run Code Online (Sandbox Code Playgroud)

这在正常情况下工作正常.如果我正在更改方向(应用程序仅支持横向方向)或呈现任何视图控制器并关闭模型视图控制器,我的视图控制器对齐方式已更改.状态栏再次与我的视图控制器重叠.这段代码根本不起作用.请指导我修复此状态栏问题.

案例2:这就是我呈现视图控制器的方式

ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    reader.supportedOrientationsMask = ZBarOrientationMaskLandscape;
else
    reader.supportedOrientationsMask = ZBarOrientationMaskPortrait;

    [self presentModalViewController:reader animated:YES];
Run Code Online (Sandbox Code Playgroud)

参考:

在此输入图像描述

提前致谢.

Gan*_*thy 132

修复了IOS 7中的状态栏问题

最后,我使用xcode5中的delta值属性修复了状态栏.首先我增加了原点 - 对于Xib中使用的所有控制器都是20pxl(它的接缝仅在IOS 7中正常工作),之后我将所有视图控制器原点的delta值设置为-y它工作正常在ios 6和IOS 7中.

这样做的步骤.

Xcode 5提供预览选项,可根据操作系统版本查看不同视图中xib的外观.

从助理编辑器中选择预览选项

点击助理编辑器

在此输入图像描述

并选择预览选项以预览不同版本的所选视图控制器. 在此输入图像描述

查看控制器视图预览选项.

在此输入图像描述

在预览中,您可以找到切换选项以预览不同版本的视图.在预览中,如果通过切换版本未正确修复状态栏,则可以清楚地感觉到状态栏问题.

修复状态栏问题的三个步骤: 步骤1: 确保视图在文件检查器中以7.0及更高版本为目标. 在此输入图像描述

步骤2:增加原点 - y为视图控制器中添加的所有控件的20像素(与状态栏的大小完全相同).

步骤3:将所有控件的原点y的delta值设置为-20,然后仅根据版本自动调整.现在使用预览,并感受控件因delta值而自动调整的差异. 在此输入图像描述

状态栏问题解决后,在显示模型视图(ZbarSDk控制器)时发出的问题也会自动修复.

预览屏幕:

在此输入图像描述

  • 如果你不满意(谁给了我投票-1)这个答案,请发表评论.所以我可以改善我的答案. (10认同)
  • 众神,iOS的布局系统似乎一团糟.硬编码,版本相关的偏移量?说真的苹果? (3认同)
  • 当我按照你的步骤进行操作时,我无法设置我的视图药水+20,正如你在#step2中提到的那样,因为它被禁用了.我如何制作可编辑的? (2认同)

Viz*_*llx 15

我这个答案迟到了,但我只想分享我的所作所为,这基本上
最简单的解决方案

首先 - >转到你的info.plist File添加状态栏样式 - >透明黑色样式(0.5的Alpha)

现在,它来了: -

在AppDelegate.m中添加此代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
     //Whatever your code goes here
  if(kDeviceiPad){

     //adding status bar for IOS7 ipad
         if (IS_IOS7) {
              UIView *addStatusBar = [[UIView alloc] init];
              addStatusBar.frame = CGRectMake(0, 0, 1024, 20);
              addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //change this to match your navigation bar
              [self.window.rootViewController.view addSubview:addStatusBar];
                    }
                }
    else{

         //adding status bar for IOS7 iphone
        if (IS_IOS7) {
            UIView *addStatusBar = [[UIView alloc] init];
            addStatusBar.frame = CGRectMake(0, 0, 320, 20);
            addStatusBar.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; //You can give your own color pattern
            [self.window.rootViewController.view addSubview:addStatusBar];
        }

    return YES;
   }
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 6

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];

    self.window.rootViewController = self.viewController;

 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {

        [application setStatusBarStyle:UIStatusBarStyleLightContent];
         [application setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

        self.window.clipsToBounds =YES;            
        self.window.frame =CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
    }


   [self.window makeKeyAndVisible];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

将以下内容设置为info.plist

查看基于控制器的状态栏外观= NO;