安全区和导航栏

时间:2018-12-11 18:28:00

标签: ios autolayout uinavigationbar iphone-x safearealayoutguide

我正在尝试在xib中添加导航栏,但是导航栏没有填充到顶部,而是在其上方留出了相机缺口的位置。请参见下面的屏幕截图:

enter image description here

这是我对导航栏的限制:

enter image description here

我还尝试将导航栏的顶部约束设置为Superview。其结果是:

enter image description here

我不敢相信这很困难。我在这里想念什么?

3 个答案:

答案 0 :(得分:1)

  1. 您应该在导航栏上使用@IBOutlet(如果以编程方式创建导航栏,则为参考)。另外,将栏的顶部约束保持在安全区域。
  2. 使您的ViewController符合UINavigationBarDelegate并设置导航栏的委托(navigationBar.delegate = self
  3. 实现此功能并返回.topAttached:

func position(for bar: UIBarPositioning) -> UIBarPosition { return .topAttached }

答案 1 :(得分:0)

几乎几乎不需要将UINavigationBar直接添加到视图控制器的view中,而是希望将视图控制器嵌入UINavigationController中。如果您使用情节提要,则可以通过选择视图控制器,单击“编辑器”菜单->“嵌入”->“导航控制器”来执行此操作。

如果不使用情节提要板,则可以创建一个视图控制器,并将其设置为UINavigationController的根视图控制器。然后显示导航控制器或将该导航控制器嵌入到选项卡控制器或拆分控制器中。

let mySpecialViewController = MySpecialViewController()
let navigationController = UINavigationController(rootViewController: mySpecialViewController)
present(navigationController, animated: true)

上面的代码需要从UIViewController子类内部调用。

如果您是通过应用程序委托来设置应用程序的初始视图控制器的,则可以这样做:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let mySpecialViewController = MySpecialViewController()
    let navigationController = UINavigationController(rootViewController: mySpecialViewController)
    window?.rootViewController = navigationController
    window?.makeKeyAndVisible()
    return true
}

答案 2 :(得分:0)

遇到了同样的问题,并且能够找到解决方案。您需要做的是设置委托,在返回UIBarPositionTopAttached的委托中实现positionForBar:

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