2017-09-10 25 views
17

显然改变的导航栏高度面临着一种新的方法在iOS的11 在以前的IOS版本,有可能通过隐藏默认的导航栏,添加一个新的自定义框架改变的导航栏高度:如何更改iOS 11中的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测试版。不管新的高度是什么,它会一直停留在44

这就是我得在Xcode 9:

enter image description here

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

回答

11

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

你的代码:

的Xcode 9 enter image description here

的Xcode 8 enter image description here

,你可以在Xcode的9图像中看到,你有自定义导航栏,但默认一个不隐藏。可能是Xcode 9中的一个bug,我没有设法通过Storyboard隐藏它。

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

+0

是的,我只看到xcode 9 for iOS11的问题。它也隐藏默认导航栏并添加自定义,但问题是高度不会更改为新的。 – Mina

+0

@Mina,它的确如此。自定义导航栏是您在Xcode 9图像中看到的绿色区域。 –

+0

我已经用图像更新了我的问题。 我还添加了'''customNavigationBar.backgroundColor = .red self.navigationController?.navigationBar.barTintColor = .purple self.navigationController?.navigationBar.barTintColor = .yellow''' 但你可以看到导航酒吧的颜色没有变成紫色或黄色,所以我认为它隐藏了默认的导航栏。正如你可以看到标题被添加到自定义的标题而不是默认的标题 – Mina

0

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

在新创建的导航控制器属性上,在Utilities(右侧栏)菜单'Simulated Metrics'中,必须指定'Top Bar'属性。在我的情况下,我需要的价值:'不透明导航栏'。

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

通过这样做,一个新的“导航项目”将在您的处置,您可以重新添加您的酒吧按​​钮项目。

这是我可以做的最好的,当我们等待Xcode 9更新来解决它。

+0

“Simulated Metrics”仅在IDE中工作,不在构建的应用程序中,不是吗? – SoftDesigner

+0

确切地说,只是想知道会显示什么。 –

10

这是更多的黑客,直到苹果修复错误。我面临同样的问题,所以我将导航栏的顶部约束从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编译更好。

+0

它增加了被苹果拒绝的可能性。 – Mina

+0

Apple只会拒绝那些使用私有API的应用程序,这些应用程序不建议公开使用。话虽如此,你可以采用这种风格,直到Apple解决问题。 –

+1

这是一个坚实的解决方案,直到苹果决定修复这个bug。感谢发布! –

相关问题