导航栏显示在新iOS7 SDK的视图上

CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

在早期版本中,它工作正常。 搜索栏出现在statusbar和导航栏下方。 tableview出现在搜索栏下方

但是当我在Xcode 5 sdk iOS 7上运行它时,搜索栏不可见(我认为它位于状态栏和导航栏下),导航栏也出现在表视图上。

它会在iOS 7稳定版本中修复吗?

或者是我的编码问题?

或者,我们是否应该通过为iOS 7添加y (y = statubar height + nav bar height)值来处理它?

我最近下载了Xcode 5 DP来在iOS 7中测试我的应用程序。我注意到并确认的第一件事是我的视图边界并不总是调整到状态栏和导航栏的大小。

在viewDidLayoutSubviews中,我打印视图的边界:

{{0, 0}, {320, 568}}

这会导致我的内容出现在导航栏和状态栏下方。

我知道我可以通过获得主屏幕的高度来减去状态栏的高度和导航栏的高度来解释高度,但这似乎是不必要的额外工作。

有其他人遇到过这个问题吗?

更新:

我找到了解决这个问题的解决方案。 将导航栏的半透明属性设置为NO:

self.navigationController.navigationBar.translucent = NO;

这将修复导航栏和状态栏下面的视图。

但是,当您希望导航栏变为半透明时,我还没有找到解决方案。 例如,全屏查看照片,我希望导航栏半透明,并在其下面框住视图。 这有效,但当我切换显示/隐藏导航栏时,我遇到了更奇怪的结果。 第一个子视图( UIScrollView )每次都会更改其原点的边界。


这并非完全正确。 iOS 7中引入了一个新属性,可以让您像以前版本的iOS一样调整布局行为。 将这段代码放在你的视图控制器中,你应该很好去! 导航栏占用的空间应自动计算在内

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

您需要在-(void)viewDidLoad方法中添加上述内容。

注意:由于API已从测试版本更改,因此您现在应该使用iOS 7和Xcode 5的最新GM版本。


故事板截图

如果您正在Storyboard中工作(我强烈建议!)这是解决方案:您可以在Storyboard中禁用ViewController的“Extend Edges”。 您必须为每个viewController执行此操作。 您可以通过单击stortyboard中的viewController图标(除了视图本身下面的productOwner),然后选择属性检查器(如图像显示)来禁用扩展边。

这也将设置像iOS 6一样的对齐线。

xCode 5中另一个伟大的工具是“预览”:点击管家按钮(助理编辑器)并选择预览。 您可以选择iOS 6并查看您的故事板设计在iOS 6上的样子。

它很棒:D

[更新]

小心:当应用程序在iOS7上进入背景时,禁用“延伸边缘”可能导致导航栏上发黑。 在多任务视图中也会显示辉光(双击主屏幕按钮)。 这可以通过将导航条视图的背景颜色设置为白色来解决。

[self.navigationController.view setBackgroundColor:[UIColor whiteColor]];

正如OP所说,有一个简单的解决方案,即将导航栏设置为不透明。 而不是在代码中进行此操作,只需将根目录导航栏的“半透明”

在这里输入图像描述

链接地址: http://www.djcxy.com/p/90313.html

上一篇: Navigation bar appear over the views with new iOS7 SDK

下一篇: Status bar and navigation bar appear over my view's bounds in iOS 7