How to remove border of the navigationBar in swift?

前端 未结 25 1829
执笔经年
执笔经年 2020-12-02 04:41

i\'ve been trying to remove the navigationBars border without luck. I\'ve researched and people seem to tell to set shadowImage and BackgroundImage to nil, but this does not

相关标签:
25条回答
  • 2020-12-02 05:34

    Luca Davanzo's answer is great, but it does not work in iOS 10. I altered it to work in iOS 10 and below.

    for parent in navigationController!.view.subviews {
        for child in parent.subviews {
            for view in child.subviews { 
                if view is UIImageView && view.frame.height == 0.5 {
                    view.alpha = 0
                }
            }
        }
    }
    

    You can also extend UINavigationController and call this off of that. removeFromSuperview() on the line will not work on iOS 10, so I just set the alpha to 0 so this one call is compatible everywhere.

    0 讨论(0)
  • 2020-12-02 05:34

    If you want to remove only the bottom line and keep the solid color of navigationBar, add these lines of code in viewDidLoad: Swift 3, 4:

    navigationController?.navigationBar.shadowImage = UIImage()
    navigationController?.navigationBar.isTranslucent = false
    

    Peace!

    0 讨论(0)
  • 2020-12-02 05:35

    Swift 5

    When using setBackgroundImage / shadowImage to hide the hairline, there's a slight delay. This method removes the delay. Credit to Chameleon Framework. This is the method they use (in ObjC)

    
    extension UINavigationController {
        func hideHairline() {
            if let hairline = findHairlineImageViewUnder(navigationBar) {
                hairline.isHidden = true
            }
        }
        func restoreHairline() {
            if let hairline = findHairlineImageViewUnder(navigationBar) {
                hairline.isHidden = false
            }
        }
        func findHairlineImageViewUnder(_ view: UIView) -> UIImageView? {
            if view is UIImageView && view.bounds.size.height <= 1.0 {
                return view as? UIImageView
            }
            for subview in view.subviews {
                if let imageView = self.findHairlineImageViewUnder(subview) {
                    return imageView
                }
            }
            return nil
        }
    }
    
    
    0 讨论(0)
  • 2020-12-02 05:35

    for swift 3

    in viewDidLoad method

    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    navigationController?.navigationBar.shadowImage = UIImage()
    
    0 讨论(0)
  • 2020-12-02 05:36

    this will remove the shadow image altogether

    for parent in self.navigationController!.navigationBar.subviews {
     for childView in parent.subviews {
         if(childView is UIImageView) {
             childView.removeFromSuperview()
         }
     }
    }
    
    0 讨论(0)
  • 2020-12-02 05:36

    To remove border from UINavigationBar in Swift 3+, use:

    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().isTranslucent = false
    
    0 讨论(0)
提交回复
热议问题