iOS 7 | 导航栏/工具栏按钮非常靠近状态栏

Axo*_*ort 42 uinavigationbar uitoolbar uistoryboard ios7

将导航栏或工具栏(故事板)拖动到视图控制器时出现问题.

UINavigationBar的:

UINavigationBar的

如上图所示,右侧按钮几乎与状态栏重叠.

使用UIToolbar它会发生相同的事情:

UIToolbar

这个视图控制器旨在用作模态,这就是我没有使用UINavigationController的原因.

在另一节我使用UINavigationController,它看起来像我期望的那样:

UINavigationController的

如何在不重叠状态栏的情况下将UINavigationBar/UIToolbar拖动到视图控制器?

Leo*_*ica 48

导航栏或工具栏必须为(0,viewController.topLayoutGuide.length),条形位置为UIBarPositionTopAttached.您应该将导航栏或工具栏的代理设置为视图控制器,然后返回UIBarPositionTopAttached.如果定位正确,您将在第三张图像中得到结果.

更多信息:https: //developer.apple.com/documentation/uikit/uibarpositioningdelegate?language = objc

  • 您必须将栏定位在(0,20),否则它将无效.在`viewDidLoad`中:`CGRect frame = self.toolbar.frame; frame.origin.y = 20; self.toolbar.frame = frame;`.如果你的目标只针对iOS6和iOS7,你可以使用`iOS6/7 deltas`在Xcode中完全移动20pt. (3认同)

onm*_*133 25

做这些步骤

将NavigationBar拖动到Xib中的ViewController,将ViewController设置为其委托.请注意,NavigationBar应位于(0,20)

在ViewController中,符合 UINavigationBarDelegate

@interface ETPViewController () <UINavigationBarDelegate>
Run Code Online (Sandbox Code Playgroud)

实现此方法

- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}
Run Code Online (Sandbox Code Playgroud)

positionForBar告诉NavigationBar它是否应该将其背景向上扩展到状态栏

  • 你应该使用`UIBarPositioningDelegate`代替 (6认同)

bob*_*ics 10

请在此处查看我的答案,为方便起见,我复制了以下内容:

/sf/answers/1323860401/

我发现最简单的解决方法是将要显示的视图控制器包装在导航控制器中,然后显示该导航控制器.

MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc] 
    initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

好处:

  • 不需要框架.
  • 相同的代码适用于iOS 6和iOS 7.
  • 比其他解决方法更难看.

缺点:

  • 您可能希望将XIB留空导航栏或工具栏,并以编程方式将UIBarButtonItem添加到导航栏.幸运的是,这很容易.


Dav*_*vid 5

您可以使用自动布局解决此问题,根据此技术说明(防止状态栏覆盖您的视图).

以下是一些摘录:

将垂直空间约束添加到最顶层视图

  • 控制从UIToolbar拖动到"顶部布局指南"
  • 在弹出窗口中,选择"垂直间距"
  • 将"垂直空间约束"常量更改为0(零)

如果您在UIToolbar下面有其他子视图,请将这些视图锚定到工具栏而不是顶部布局指南

这将支持ios6和ios7.

  • 值得一提的是,顶部和底部布局指南仅在故事板中可用,其中视图嵌入在视图控制器中.使用nib文件,过程更复杂. (6认同)