如何防止UINavigationBar覆盖iOS 7中的顶部?

Sam*_*D20 97 objective-c uinavigationbar ios uistatusbar ios7

更新到Xcode 5后,我所有应用程序视图中的导航栏都向下移动.下面是一些截图,第一个显示视图中的所有内容,因为它被拉下来,第二个显示所有内容都未触及.搜索栏应从导航栏开始.

所有内容 空闲时的所有内容

有谁知道如何解决这个问题?

编辑:我之前尝试过这个建议:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;
Run Code Online (Sandbox Code Playgroud)

但它产生了非常奇怪的结果.

解决方案尝试

这可能是因为我在此视图控制器下面有一个"幻灯片菜单",由于导航栏的透明度而出现.

Dee*_*esh 232

导航栏的半透明属性设置为NO:

self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)

这将修复视图在导航栏和状态栏下面的框架.

If you have to show and hide the navigation bar, then use

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific
Run Code Online (Sandbox Code Playgroud)

in your viewDidLoad method.

  • 在viewDidLayoutSubviews功能中使它成为可能 (13认同)

Sum*_*dra 31

iOS 7通过默认所有控制器半透明的属性值是YES,那么你设置透光性NO此问题.

self.navController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)

  • 没有"navController"属性.使用此:self.navigationController.navigationBar.translucent = NO; (2认同)

Ach*_*gar 21

您可以在此屏幕的View Controller的属性检查器中禁用"扩展边缘"(如下图所示):

在此输入图像描述


upl*_*com 12

这适用于iOS 8.1上的swift

navigationController?.navigationBar.translucent = false
Run Code Online (Sandbox Code Playgroud)


jbo*_*ziz 8

如果你想保持半透明度navigationBar,在你viewDidLoad或你viewWillAppear添加这行代码的最后:

[self.view sendSubviewToBack:self.tableView]
Run Code Online (Sandbox Code Playgroud)

不知何故,如果您的scrollView子类(UITableView,UICollectionView等)index在当前视图中为0 subviews,它将根据您的情况自动调整insets navigationBar.它也不应该影响iOS7之前版​​本的UI.


编辑 如果以UITableView编程方式初始化,则最好使用此方法将其添加到视图中[self.view insertSubview:self.tableView atIndex:0];