【发布时间】:2018-12-11 18:27:59
【问题描述】:
我正在尝试在 xib 中添加导航栏,但导航栏没有填充到顶部,它在其上方留下了相机凹槽所在的空间。请看下面的截图:
这是我对导航栏的限制:
我还尝试将导航栏的顶部约束设置为 Superview。结果是这样的:
我不敢相信这会这么难。我在这里错过了什么?
【问题讨论】:
标签: ios autolayout uinavigationbar iphone-x safearealayoutguide
我正在尝试在 xib 中添加导航栏,但导航栏没有填充到顶部,它在其上方留下了相机凹槽所在的空间。请看下面的截图:
这是我对导航栏的限制:
我还尝试将导航栏的顶部约束设置为 Superview。结果是这样的:
我不敢相信这会这么难。我在这里错过了什么?
【问题讨论】:
标签: ios autolayout uinavigationbar iphone-x safearealayoutguide
您几乎不想将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
}
【讨论】:
UINavigationBar 的高度要容易得多,因为这是在符合UIKit的意图。有关更多信息,您应该观看关于构建 Apps for Every Size and Shape 的 WWDC 会议。
UINavigationBarDelegate 并设置导航栏的委托 (navigationBar.delegate = self)func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
【讨论】:
遇到了同样的问题,并且能够找到解决方案。你需要做的是设置委托,实现 positionForBar: 在委托返回 UIBarPositionTopAttached
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
【讨论】: