【问题标题】:How can I change height of Navigation Bar - Swift 3如何更改导航栏的高度 - Swift 3
【发布时间】:2017-04-06 16:32:54
【问题描述】:

我很确定这不是重复的,因为我查看了其他答案,它们都已过时并且没有提供确切的答案。

我有导航控制器和几个视图控制器。我想让导航栏更高一点,以便适合我需要的文本大小。我怎样才能做到这一点 ?

我试过这个:

UINavigationBar.appearance().frame = CGRect(x: 0.0, y: 0.0, width: 320.0, height: 210.0) 

但是什么都没发生……

另外,我无法使用 Xcode 布局按钮向导航栏添加任何约束。

希望有人能帮我解决这个问题。提前致谢!

【问题讨论】:

标签: ios swift xcode uinavigationcontroller uinavigationbar


【解决方案1】:

2020 年 8 月 3 日更新:我在 2016 年发布了此内容。许多人表示这不再有效,因此请自行承担使用风险。我目前不在 iOS 中工作,所以我手边没有更新。祝你好运!

这是一种方法:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let height: CGFloat = 50 //whatever height you want to add to the existing height
    let bounds = self.navigationController!.navigationBar.bounds
    self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height + height)
    
}

【讨论】:

  • 非常感谢您的回答,工作正常。令我惊讶的是,我在一个 VC 中添加了该代码,它适用于整个应用程序......我尝试稍微更改您的代码并将其输入到 App Delegate,但不幸的是它没有工作。但我想这很好。
  • @KirillC 你可以继承 UINavigationController 并在那里添加 Frankie 的代码。
  • @KirillC 不客气。如果有帮助,请考虑接受答案。你可以按照布雷特说的去做。此外,如果您只需要它在一个 VC 中工作,您可以向 viewWillDisappear 添加类似的方法来更改高度。
  • 我试过了,它根本不起作用。可能是新的iOS版本,调用这段代码后没有任何效果。
  • > 如果您尝试执行其他需要调整导航栏大小的操作,则不支持该操作。 openradar.appspot.com/32912789
【解决方案2】:

您可以在扩展 UINavigationController 的类中编写此代码

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let height = CGFloat(72)
    navigationBar.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: height)
}

【讨论】:

    【解决方案3】:

    你可以像这样基于UINavigationBar创建一个类

    class TTNavigationBar: UINavigationBar {
    
        override func sizeThatFits(_ size: CGSize) -> CGSize {
            return CGSize(width: UIScreen.main.bounds.width, height: 55)
        }
    
    }
    

    并将其添加到您的 NavigationController。

    【讨论】:

    • 你知道为什么在我的例子中这个方法永远不会被调用吗?我基本上只是将此代码复制粘贴到我的自定义 UINavigationBar 类中,并将其设置在我的导航栏上的故事板中。
    • @andrejbroncek 你确定你的自定义 UINavigationBar 它正在执行吗? - 一个常见的问题是,有时您最终会得到几个 UINavigationController,并且您的自定义 UINavigationBar 可能永远不会执行或者不是显示的那个
    • 同样的问题,没有被执行
    • 由于某些原因 iOS 13 不调用此方法
    【解决方案4】:

    如果您应用中的导航栏都具有相同的调整高度,这可能会更好。

    extension UINavigationBar {
        open override func sizeThatFits(_ size: CGSize) -> CGSize {
            return CGSize(width: UIScreen.main.bounds.width, height: 51)
        }
    }
    

    【讨论】:

      【解决方案5】:

      您可以从 xib (使用您的身高)绘制导航栏,然后:

      self.navigationController?.navigationBar.addSubview(yourNavBarView)
      

      或者,如果你想从代码中创建 UIView,

      let viewNavBar = UIView(frame: CGRect(
          origin: CGPoint(x: 0, y:0), 
          size: CGSize(width: self.view.frame.size.width, height: 100)))
      

      然后添加到导航栏。

      【讨论】:

      • 你不需要这样说init。 — 这里的一个主要缺陷是您创建了一个普通的 UIView,而不是 OP 想要的 UINavigationBar。
      猜你喜欢
      • 2015-11-15
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多