2017-08-26 55 views
0

我已經從被推入的UIViewController中刪除了UINavigationBar底線;UINavigationBar行在被推送的UIViewController上被移除後不會在父級UIViewController上顯示

一切正常,直到我點擊後退按鈕,看到父母UIViewController(推誰)也沒有底線。

這裏的問題是我只想要從特定的UIViewController中刪除底線,而不是從所有視圖堆棧中移除底線。

這裏是我如何刪除行:

self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 

任何提示?

謝謝。

+0

我想你回到父視圖控制器'viewWillAppear'方法時,你必須恢復導航欄的變化。 – Amit

+0

事情是,我怎麼知道默認的背景圖片?或者如何訪問默認屬性? –

回答

1

在父視圖控制器的方法viewWillAppear添加:

self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default) 

或在視圖控制器viewWillDisappear方法,其中,要更改的圖像添加相同的上面的行。

0

你可以繼承UINavigationController和改變圖像在這樣的willShowViewController(或didShowViewController)的委託方法:

class NavigationController: UINavigationController, UINavigationControllerDelegate { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     delegate = self 
    } 

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { 
     if viewControllers.count > 1 { 
      navigationBar.shadowImage = UIImage() 
      navigationBar.setBackgroundImage(UIImage(), for: .default) 
     } else { 
      navigationBar.shadowImage = nil 
      navigationBar.setBackgroundImage(nil, for: .default) 
     } 
    } 

} 

取決於你如何實例化導航控制器,你必須覆蓋其他一些初始化阿爾斯好。

相關問題