Search code examples
iosswiftuinavigationcontrolleruinavigationbarios13

Hide Navigation bar separator line on iOS 13


I have a view controller with a navigation bar with a large title. When I push the controller, only on iOS 13 is a line visible under the Navigation bar. How can I solve it?

I have already tried several solutions on Stack but they have not worked like:

let navigationBar = navigationController?.navigationBar
let navigationBarAppearence = UINavigationBarAppearance()
navigationBarAppearence.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearence

With this snippet, even if I change the "clear color" with red color it is visible only in the first controller, in the pushed controller it is always gray.

How can I solve it?

Edit

I've solved with:

if #available(iOS 13.0, *) {
    let appearance = UINavigationBarAppearance()
    appearance.shadowColor = nil
    navigationController?.navigationBar.standardAppearance = appearance
 }

Solution

  • import UIKit
    
    public protocol HideableHairlineHelper {
        func hideHairline()
        func showHairline()
    }
    
    extension HideableHairlineHelper where Self: UIViewController {
    
        public func hideHairline() {
            self.navigationController?.navigationBar.shadowImage = UIImage()
            self.navigationController?.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
        }
    
        public func showHairline() {
            self.navigationController?.navigationBar.shadowImage = nil
        }
    }