【问题标题】:How do I programmatically change the height of a navigationBar in Swift?如何以编程方式更改 Swift 中导航栏的高度?
【发布时间】:2017-06-23 05:04:59
【问题描述】:
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let height = CGFloat(84)
    self.navigationController?.navigationBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: height)
}

此代码只是在 titleView 上方插入空间。点 (0,0) 处的自定义 titleView 在其上方有大约 20 点空间。高度 >40 开始超出导航栏。

【问题讨论】:

  • 44(navigationBar height) + 20(status bar height) = 64 是标准的。

标签: ios swift navigationbar


【解决方案1】:

你可以继承 UINavigationBar :

class CustomNavigationBar: UINavigationBar {
    override func sizeThatFits(_ size: CGSize) -> CGSize {
        let newSize :CGSize = CGSize(width: self.frame.size.width,height: 84)
        return newSize
    }
}

然后创建导航控制器并使用初始化器来使用您的自定义导航栏类​​。

let nav = UINavigationController(navigationBarClass:CustomNavigationBar.self,toolbarClass: nil)

UINavigationBar 的所有现有行为都将保留,并采用您的自定义高度。

就像你已经尝试过的那样:

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

}

或: 你可以试试这个解决方案Changing the height of the Navigation bar iOS Swift

【讨论】:

    【解决方案2】:

    您可以使用自定义视图来替换导航栏。这样更简单灵活。隐藏导航栏并实现自定义视图。

    class ViewController : UIViewController {
    
        var navBar: UINavigationBar = UINavigationBar()
    
        override func viewDidLoad() {
            super.viewDidLoad()
            self.setCustomNavBarView()
        }
    
        func setCustomNavBarView() {
            self.navBar.frame = CGRect(x: 0, y: 0, width: 350, height: 50)  // Set you custom width and Height
            self.navBar.backgroundColor = UIColor.gray
            self.view.addSubview(navBar)
    
        }
    }
    

    一个简单的tutorial 说明如何做到这一点:

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:
              class ViewController: UIViewController {
              var navBar: UINavigationBar = UINavigationBar()
              override func viewDidLoad() {
                  super.viewDidLoad()
                  // Do any additional setup after loading the view, typically from a nib.    
                  self.setCustomNavBarView()
          }
      `func setCustomNavBarView() {
                  self.navBar.frame = CGRect(x: 0, y: 0, width: 350, height: 100)  // Set you custom width and Height
                  self.navBar.backgroundColor = UIColor.gray
                  self.view.addSubview(navBar)
              }
          `
      

      swift 3 在这里更新了代码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-06
        • 2011-11-10
        • 2015-11-15
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多