iOS 10 custom navigation bar height iOS 10 custom navigation bar height swift swift

iOS 10 custom navigation bar height


Works on iOS 10, Swift 3.0:

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


I checked Interface debugger and this is what i see (so basically it's trying to change navigation bar height, bit it's stays same and it's showing just black space - which is window color):

enter image description here

With later investigation i noticed that it's not calling: "_UINavigationBarBackground"

Then i checked view.classForCoder from fast enumeration, and discovered that key is changed to "_UIBarBackground", so i updated layoutSubviews():

override func layoutSubviews() {    super.layoutSubviews()    let shift = TMNavigationBar.heightIncrease/2    ///Move the background down for [shift] point    let classNamesToReposition = isIOS10 ? ["_UIBarBackground"] : ["_UINavigationBarBackground"]    for view: UIView in self.subviews {        if classNamesToReposition.contains(NSStringFromClass(view.classForCoder)) {            let bounds: CGRect = self.bounds            var frame: CGRect = view.frame            frame.origin.y = bounds.origin.y + shift - 20.0            frame.size.height = bounds.size.height + 20.0            view.frame = frame        }    }}

Cheers.