如何在iOS 11中更改navigationBar高度?

显然更改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中得到的:

在此处输入图像描述

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

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

你的代码:

Xcode 9 在此处输入图像描述

Xcode 8 在此处输入图像描述

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

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

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

之前: 在此处输入图像描述

后: 在此处输入图像描述

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

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

之前: 在此处输入图像描述

后: 在此处输入图像描述

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

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

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

我也在我的UIViewController上设置了相同的“顶栏”值,只是为了确保。

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

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

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

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

Interesting Posts