iOS 7中的导航栏和状态栏问题

时间:2014-06-30 06:48:19

标签: iphone ios7 navigationbar ios7-statusbar

我在XIB之前使用Status Bar创建了一个没有iOS7的应用,现在我需要在我的应用上添加Status bar,而Status bar background color应该与Navigation bar背景色。所以我试过(在我的info.plist):

1) Set View controller-based status bar appearance to NO
2) Set Status bar style to UIStatusBarStyleLightContent 

这是我的App Delegate代码:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

[[UINavigationBar appearance] setBarStyle:UIBarStyleDefault];
[[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:(51/255.0) green:(51/255.0) blue:(51/255.0) alpha:1.0]];
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:(51/255.0) green:(51/255.0) blue:(51/255.0) alpha:1.0]];

所以我得到的输出如下图所示:

enter image description here

此外,我在屏幕上显示的UIButton错位(隐藏了20个像素)。

你能帮我解决一下我该如何解决这个问题?我需要输出如下图所示:

enter image description here

非常感谢任何帮助,谢谢。

第三屏:

enter image description here

3 个答案:

答案 0 :(得分:1)

在viewDidLoad方法中添加以下代码:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

if (systemVersion >= 7.0) 
{
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

答案 1 :(得分:1)

请在AppDelegate.h(或)constants.h

中定义
  #define isIOS7  ([[[UIDevice currentDevice]systemVersion]floatValue] >=7.0)?YES:NO

在viewDidLoad下写下这一行。

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
   UIView *addStatusBar = [[UIView alloc] init];
   addStatusBar.frame = CGRectMake(0, 0, 320, 20);
    addStatusBar.backgroundColor = [UIColor colorWithRed:0.973 green:0.973 blue:0.973 alpha:1];


     //change this to match your navigation bar
    [self.window.rootViewController.view addSubview:addStatusBar];
  }

或者我们可以在xib中手动更改它。

将每个元素向下移动20px。

Seethis image

答案 2 :(得分:0)

很少有人建议这一点感到惊讶。这是正确的方法(没有黑客攻击)

首先,让你的navigationBar的Y原点为20.

然后在.h文件中,将ViewController设置为UIBarPositioningDelegate:

@interface XYZViewController : UIViewController <UIBarPositioningDelegate>

在.m文件中:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationBar.delegate = self;
}

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { 
    return UIBarPositionTopAttached; 
}