【问题标题】:How to change navigationBar height in iOS 11?如何在 iOS 11 中更改导航栏高度?
【发布时间】:2017-09-10 07:17:43
【问题描述】:

显然,在 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 beta。无论新高度是多少,它都将始终保持在 44。

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

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

【问题讨论】:

    标签: ios swift uinavigationbar ios11 xcode9


    【解决方案1】:

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

    您的代码:

    Xcode 9

    Xcode 8

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

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

    【讨论】:

    • 是的,我只在 iOS11 的 xCode 9 中看到了这个问题。它还隐藏了默认导航栏并添加了自定义,但问题是高度不要更改为新的。
    • @Mina,确实如此。自定义导航栏是您在 Xcode 9 图像中看到的绿色区域。
    • 感谢您的帮助,至少我知道它会绘制自定义的。
    • 我已经提交了一个关于这个问题的错误。
    • 我也报告了这个问题。该错误仍然存​​在于 xCode Golden master 版本中。
    【解决方案2】:

    在 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 编译要好。

    【讨论】:

    • 增加被苹果拒绝的可能性。
    • Apple 只会拒绝使用不建议公开使用的私有 API 的应用。话虽如此,在 Apple 解决问题之前,您可以采用这种风格。
    • 这是一个可靠的解决方案,直到 Apple 决定修复该错误。感谢发帖!
    • 请问您可以添加更新导航栏顶部约束的代码吗?谢谢。
    【解决方案3】:

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

    在新创建的导航控制器属性上,必须在实用程序(右侧栏)菜单“模拟指标”中指定“顶部栏”属性。在我的情况下,我需要这个值:'不透明的导航栏'。

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

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

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

    【讨论】:

    • Simulated Metrics 只能在 IDE 中工作,不能在构建的应用程序中工作,不是吗?
    • 没错,只是想知道将要显示什么。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

          self.navigationController?.navigationBar.prefersLargeTitles = true
      

      结果:

      【讨论】:

        【解决方案6】:

        answer 为我完成了这项工作。

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

        【讨论】:

          猜你喜欢
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-15
          • 2018-03-01
          • 2017-11-07
          • 2011-09-29
          相关资源
          最近更新 更多