Change width/height UINavigationBar embedded in a

2019-07-29 11:02发布

问题:

Constraints can be assigned to UINavigationBar that is added manually to the view.

But when the UINavigationBar is added to a view when and the view is embedded in a Navigation Controller, I am not able to add constraints to the same.

My objective is to increase the height of the UINavigationBar

回答1:

UINavigationBar does not allow to assign constraints to itself. The only easy way that the height can be changed is by adding a space to the prompt property.

To increase the the height of the UINavigationBar there are two steps:

  1. Sub-class the UINavigationBar class and overriding the method that give the height to the UINavigationBar, this class thereafter needs to be assigned to the NavBar of the Navigation Controller

Note: All the views under that particular Navigation Controller will have the new height

Code Snippet:

class ModifiedNavBar: UINavigationBar {

override func sizeThatFits(size: CGSize) -> CGSize {

let screenWidth =  UIScreen.mainScreen().bounds.width

    let newSize:CGSize = CGSizeMake(screenWidth, 60)

    return newSize
   }

  }

Note: The above step increases the height of the NavBar but it does not give you full customisation options. Adding a view gives you full control over the same.

  1. Create a view programmatically and then adding it to the UINavigationItem (titleView) Outlet:

Code Snippet:

class ViewController: UIViewController {

/*** UINavigationItem Outlet ***/
@IBOutlet weak var navbar: UINavigationItem!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    super.viewDidLoad()

    let view = UIView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 90))
    let label = UILabel(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20))
    let label2 = UILabel(frame: CGRectMake(0, 20, UIScreen.mainScreen().bounds.width, 20))

    /*** First Label ***/
    label.text = "Hello"
    label.textAlignment = NSTextAlignment.Left
    view.addSubview(label)

    /***Second Label ***/
    label2.text = "Hello2"
    label2.textAlignment = NSTextAlignment.Left
    view.addSubview(label2)

    self.navbar.titleView = view
}

Note: If prompt is added to any of the UINavigationItem objects the size of the NavBar will increase