显然改变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中得到的:
有谁知道如何解决这个问题?
在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上设置了“Top Bar”的相同值,只是为了确保。
通过这样做,您可以使用新的“导航项目”,并且可以重新添加条形按钮项目。
这是我在等待Xcode 9更新修复它时所做的最好的事情。
在iOS 11中,我们无法更改导航栏高度,如果要增加高度,我们应该使用自定义视图。