Charles Black
Charles Black

Reputation: 143

How do I programmatically change the height of a navigationBar in Swift?

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)
}

This code simply inserts space above the titleView. A custom titleView at point (0,0) has ~20 points of space above it. A height >40 starts to run off the navBar.

Upvotes: 2

Views: 13805

Answers (3)

iUser
iUser

Reputation: 330

you can use a custom view to replace the navigation bar.This is more easy and flexible. hide the navi bar and implement a custom view.

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)

    }
}

A simple tutorial on how to do that:

Hope this helps!!

Upvotes: 2

karthik
karthik

Reputation: 159

        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 updated code here

Upvotes: 0

Sid Mhatre
Sid Mhatre

Reputation: 3417

You can subclass UINavigationBar :

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

Then create the navigation controller and use the initialiser to use your custom navigation bar class.

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

All existing behavior for UINavigationBar is preserved and your custom height is adopted.

OR

Like you already tried :

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)

}

OR : You can try this solution Changing the height of the Navigation bar iOS Swift

Upvotes: 3

Related Questions