ios 7状态栏和导航栏问题

时间:2013-10-25 13:37:04

标签: objective-c ios7

我的应用程序的视图与ios7设备中的状态栏和navigationBar重叠,所以我尝试了很多解决方案

  • 取消选中storyboard中的“顶栏”属性
  • self.edgesForExtendedLayout = UIRectEdgeNone;
  • 在故事板中将delta y设置为-20 ......

但这些都没有奏效。 我的最后一次试验是将这些行添加到appdelegate的didFinishLaunchingWithOptions

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
application.statusBarStyle = UIStatusBarStyleLightContent;
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    self.window.clipsToBounds =YES;
} else {
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
}

当导航栏被隐藏但是当没有隐藏nagivigation时,它工作得很好 导航栏的框架是(0,20,320,44)而不是(0,0,320,44) 所以navigationBar的高度似乎是64 .. 为什么是这样?希望有人解释我! 谢谢是提前:))

3 个答案:

答案 0 :(得分:2)

有关差异的更好解释,请参阅此转换指南(link)。

答案 1 :(得分:1)

确保在viewWillAppear:

中设置此项
self.navigationController.navigationBar.translucent = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;

答案 2 :(得分:0)

为避免与UINavigationBar重叠,您必须将其translucent属性设置为NO

对于状态栏,您必须通过指定其样式手动设置它,然后重新定位整个窗口的框架。我将添加iOS 7条件,以确保只有运行iOS 7的用户才能使用。

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {

    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    self.window.clipsToBounds =YES;
    self.window.frame =  CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height - 20); 
}