Cant Change Navigation Bar Height iOS 11

Cant change navigation bar height ios 11

Changing the height of the UINavigationBar is no longer directly supported in iOS 11 (see here, here & here).

The best you can hope for is to do something like having a view behind the navigation bar and removing the borders (see here for customisation examples).

Cannot change navigation bar item height in iOS 11

You can change the width of navigation bar button item by using this code -

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var frame: CGRect? = navigationItem.leftBarButtonItem?.customView?.frame
frame?.size.width = 5 // change the width of your item bar button
self.navigationItem.leftBarButtonItem?.customView?.frame = frame!
}
override var prefersStatusBarHidden : Bool {
return true
}

Or from storyboard -

Sample Image

Make sure your Assets.xcassets image is set as Render As - Original Image Just like -

Sample Image

How to change navigationBar height in iOS 11?

Your code is working fine and it´s nothing wrong with it. If you change the background color of your customNavigationBar you´ll see that you´ll get the navigation bar with the desired height. But it seems like it´s an issue with Xcode 9 to hide the default navigation bar.

Your code with:

Xcode 9
Sample Image

Xcode 8
Sample Image

As you can see in the Xcode 9 image, you have the custom navigation bar but the default one does not hide. Probably a bug in Xcode 9, I did not manage to hide it through the Storyboard either.

This seems to be a bug in Xcode 9, bug reports has been filed to Apple.

How to create and change size height navigation bar iOS 11

I think you can't change it - not supported anymore. Here's the quote from Apple staff

Resizing the navigation bar (via any method, including subclassing) is
not supported, and neither is changing the frame of a navigation bar
that is owned by a UINavigationController (the navigation controller
will happily stomp on your frame changes whenever it deems fit to do
so). The navigation bar needs to be placed on the bottom edge of
the status bar, not underlapping the status bar, and with its natural
height.Finally, the internal layout of the
navigation bar is an implementation detail including all class names
and orderings
. Any code that relies upon the ordering of the
navigation bar's subviews or the names of any of their classes is
likely to encounter issues in the future, as these are all private
details. Please do not rely upon them. If there are things you want to
do with a navigation bar that you cannot

A walk around is to use the image view then change its height.

UISearchBar increases navigation bar height in iOS 11

I got black line under NavigationBar with SearchBar in iOS 11 in two cases:

  • when i pushed another ViewControllers from ViewController with UISearchBar
    Sample Image

  • when i dismissed ViewController with UISearchBar with "drag right to dismiss"
    Sample Image

My solution was: adding this code to my ViewController with UISearchBar:

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController.view setNeedsLayout]; // force update layout
[self.navigationController.view layoutIfNeeded]; // to fix height of the navigation bar
}

Swift 4 Update

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.view.setNeedsLayout() // force update layout
navigationController?.view.layoutIfNeeded() // to fix height of the navigation bar
}


Related Topics



Leave a reply



Submit