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

问题描述 投票:24回答:5

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

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 beta中运行。无论新高度是多少,它都会保持在44。

这就是我在xCode 9中得到的:

enter image description here

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

ios swift uinavigationbar ios11 xcode9
5个回答
12
投票

你的代码运行正常,它没有错。如果你改变你的customNavigationBar的背景颜色,你会看到你会得到所需高度的导航栏。但似乎Xcode 9隐藏默认导航栏是一个问题。

你的代码: Xcode 9 enter image description here

Xcode 8 enter image description here

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

这似乎是Xcode 9中的一个错误,错误报告已经提交给Apple。


12
投票

在Apple修复bug之前,这更像是一个黑客攻击。我遇到了同样的问题,所以我将导航栏的顶部约束从0更改为20。

之前:enter image description here

之后:enter image description here

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

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

之前:enter image description here

之后:enter image description here

这似乎是一个冗长的黑客攻击,但仍然比使用Xcode 8.3返回和编译更好。


1
投票

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

在新创建的Navigation Controller属性上,在Utilities(右侧栏)菜单'Simulated Metrics'上,必须指定'Top Bar'属性。就我而言,我需要价值:'不透明的导航栏'。

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

通过这样做,您可以使用新的“导航项目”,并且可以重新添加条形按钮项目。

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


1
投票

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

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


1
投票

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

    self.navigationController?.navigationBar.prefersLargeTitles = true

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.