如何更改 iOS 11 中的导航栏高度?

How to change navigationBar height in iOS 11?

显然,在 iOS 11 中,更改导航栏高度面临着一种新方法。 在以前的 iOS 版本中,可以通过隐藏默认导航栏并添加一个带有自定义框架的新导航栏来更改导航栏高度:

self.navigationController?.setNavigationBarHidden(true, animated: false)
let customNavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64))
self.view.addSubview(customNavigationBar)

但它似乎在 iOS 11 xCode 测试版中不起作用。不管新的高度是多少,它都会一直保持在44。

这是我在 xCode 9:

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

您的代码运行良好,没有任何问题。如果您更改 customNavigationBar 的背景颜色,您会看到您将获得具有所需高度的导航栏。但是 Xcode 9 隐藏默认导航栏似乎是个问题。

您的代码:

Xcode 9

Xcode 8

正如您在 Xcode 9 图片中看到的,您有自定义导航栏,但默认导航栏不会隐藏。可能是 Xcode9 中的一个错误,我也没有设法通过 Storyboard 隐藏它。

这似乎是 Xcode9 中的错误,错误报告已提交给 Apple。

我唯一能让它工作的方法是删除当前的自定义导航栏,并将嵌入的 UINavigationController 应用到 UIViewController。 编辑器 -> 嵌入 -> 导航控制器。

在新创建的导航控制器属性中,必须在实用程序(右侧栏)菜单 'Simulated Metrics' 中指定 'Top Bar' 属性。就我而言,我需要以下值:'Opaque Navigation Bar'.

我还在我的 UIViewController 上设置了相同的 'Top Bar' 值,只是为了确保。

这样,一个新的 'Navigation Item' 将供您使用,您可以重新添加您的栏按钮项目。

这是我在等待 Xcode 9 更新修复它时所能做的最好的事情。

在 Apple 修复该错误之前,这更像是一种破解。我遇到了同样的问题,所以我将导航栏的顶部约束从 0 更改为 20。

之前:

之后:

如果您的 UINavigationBar backgroundColor 不是白色,这将使状态栏保持白色。您可以通过在特定的 UIViewController 中添加以下内容来解决此问题。

let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor.red
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)

之前:

之后:

这似乎是一个冗长的 hack,但仍然比返回并使用 Xcode 8.3 进行编译要好。

在 iOS11 中,我们无法更改导航栏高度,如果您想增加高度,我们应该使用自定义视图。

参考: https://forums.developer.apple.com/thread/88202

仍然没有找到如何更改它的像素大小。但这可以创建双导航栏大小(XCode 10.1):

    self.navigationController?.navigationBar.prefersLargeTitles = true

结果:

这个 answer 帮了我的忙。

navigationController.navigationBar.setTitleVerticalPositionAdjustment(CGFloat(10),
forBarMetrics: UIBarMetrics.Default)