2017-02-13 4 views
1

Когда мой проект был в Swift 2, у меня был этот код, который работал:Swift 3 удалить линии под навигационной панели

extension UINavigationController { 
func hairLine(hide: Bool) { 
    //hides hairline at the bottom of the navigationbar 

    for subview in self.navigationBar.subviews { 
     if subview.isKind(of: UIImageView.self) { 
      for hairline in subview.subviews { 
       if hairline.isKind(of: UIImageView.self) && hairline.bounds.height <= 1.0 { 
        hairline.isHidden = hide 
       } 
      } 
     } 
    } 
} 

}

Но сейчас что-то изменилось, и он не работает. Не уверен, что это из-за Swift 3 или iOS10, или что я сейчас тестирую 7plus против 6s, но он больше не работает. Я бы назвал его viewWillAppear контроллера вида, который отображается. Я видел ответ здесь, говоря, чтобы использовать

UINavigationBar.appearance().shadowImage = UIImage() 
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) 

но это не сработало. Я попытался заменить содержимое моей старой hairLine() этими двумя строками, попытался поместить их непосредственно в viewWillAppear и viewDidAppear, но все равно не работает для меня.

ответ

-1

Попробуйте

UINavigationBar.appearance().setBackgroundImage(_: 
    nil, 
    for: .any, 
    barMetrics: .default) 

UINavigationBar.appearance().shadowImage = nil 
+1

попробовал это в viewDidAppear & Load, но до сих пор линию. Где вы называете этот код? Я вызываю его из контроллера, встроенного в навигационную панель, как и в моем старом коде. Должен ли я пытаться где-то еще? –

+0

У меня есть это в viewDidLoad контроллера, встроенного в навигационную панель. Позвольте мне подумать над тем, что может быть проблемой. –

2

До:

enter image description here

После:

enter image description here

Код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationItem.title = "Hello World" 

    let navbarColor = UIColor(colorLiteralRed: (247/255), green: (247/255), blue: (247/255), alpha: 1) 
    let image = UIImage() 

    navigationController?.navigationBar.setBackgroundImage(image, for: .default) 
    navigationController?.navigationBar.shadowImage = image 
    navigationController?.navigationBar.backgroundColor = navbarColor 

    let statusBarHeight = UIApplication.shared.statusBarFrame.height 
    let statusBarWidth = UIScreen.main.bounds.size.width 

    let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: statusBarWidth, height: statusBarHeight)) 
    statusBarView.backgroundColor = navbarColor 

    view.addSubview(statusBarView) 
    } 
+1

Это ломает некоторые вещи. Строка состояния становится белой, а не цветной навигационной панели. У меня есть панель инструментов прямо под навигационной панелью, и даже если они настроены на один и тот же точный цвет, теперь есть небольшая разница в цвете между навигационной панелью и панелью инструментов. Но на ваш счет он удалил линию LOL –

0

Try:

self.navigationController?.navigationBar.setBackgroundImage(_:UIImage(), 
     for: .any, 
     barMetrics: .default) 
self.navigationController?.navigationBar.shadowImage = UIImage() 

в viewDidLoad()

0

Попробуйте

self.navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")