【问题标题】:UINavigationBar frame height returns 44.0 but is actually 64.0UINavigationBar 框架高度返回 44.0 但实际上是 64.0
【发布时间】:2016-10-23 12:28:30
【问题描述】:

我在情节提要中有一个 UINavigationController,它没有使用 AutoLayout。在状态栏可见的情况下,UINavigationBar 的实际高度是 64.0,但是当我登录 self.navigationBar.frame.size.height 时,我得到 44.0。如何获取 UINavigationBar 的实际高度?

我使用的是 Xcode 7.3,并且故事板是为 iOS 6 构建的。

【问题讨论】:

    标签: ios swift xcode uinavigationbar uistoryboard


    【解决方案1】:

    UINavigationBar 的高度为 44。你得到 64 的原因是你的状态栏是可见的,它的高度是 20

    更新:
    要计算高度,您可以:

    let height = Double(UIApplication.shared.statusBarFrame.height) + Double(self.navigationController!.navigationBar.frame.height)
    

    【讨论】:

    • 有没有办法以编程方式获取 UINavigationBar 的可见高度,即在这种情况下为 64.0?
    • @matteok,检查更新,也许是这样的。
    • 我刚刚检查过,如果状态栏被隐藏,状态栏框架为 0.0,所以我认为检查 isStatusBar hidden 是不必要的。 navigationBar.height + statusBarHeight 在这两种情况下都可以解决问题。如果您同意,您可以编辑您的答案,我会将其标记为正确。
    • 确实,不需要做检查添加它以使其更清晰。更新了答案@matteok。
    【解决方案2】:

    不要使用幻数。使用视图控制器的topLayoutGuide.length 来获得正确的高度。导航栏高度和状态栏高度在运行时会发生变化,因此请在 viewDidLayoutSubviews 中运行您的代码以始终使用正确的值。

    【讨论】:

    • 据我所知,这仅在启用自动布局时有效
    • 这不是真的,无论自动布局如何,布局指南都已正确设置。
    【解决方案3】:

    最简洁的方法是只关心导航栏的位置和高度,而不是假设它上面有状态栏。 (事实上​​,如果手机方向是横向的,甚至不会有状态栏。 只需这样做:

    let height = Double(self.navigationController!.navigationBar.origin.y) + Double(self.navigationController!.navigationBar.frame.height)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2018-12-23
      相关资源
      最近更新 更多