2017-02-21 16 views
0

У меня есть несколько VC, встроенных в один контроллер NavigationController. У меня есть один VC, давайте назовите его VCNotTransparent, что я хочу, чтобы панель была не прозрачной, а на других VC я хочу, чтобы она была прозрачной. Так в основном VC, я добавил эти строки для создания бар прозрачным:Swift - добавление навигационной панели, которая переопределяет существующую

 navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) 
     navigationController?.navigationBar.shadowImage = UIImage() 
     navigationController?.navigationBar.isTranslucent = true 

Так что теперь все мои бары прозрачны в приложении. Как я могу сделать VCNotTransparent прозрачным без изменения всех других VC? одним из решений, о котором я думал, является добавление новой навигационной панели только в VCNotTransparent, но я не знаю, как это сделать.

EDIT

Я также попытался встраивание VCNotTransparent в своем собственном NavigationController, который работает почти, но проблема в том, что у меня есть навигация от него какой-либо другой ВК, и они не станут прозрачными, а также, так как они к югу навигации от VCNotTransparent.

ответ

1

Handle это путем перечисления -

ли ниже в вашем MainVC -

public enum NavigationType: Int { 
case transparent = 1 
case notTransparent = 2 
} 

var currentNavigationType: NavigationType? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.currentNavigationType = .transparent // default 
    self.setupNavigationControllerStyle() 
} 

func setupNavigationControllerStyle(){ 
switch self.currentNavigationType! { 
    case .transparent: 
     //do code here for transparent 
    case .notTransparent: 
     //do code here for not transparent 
    default: 
     break 
    } 

} 

по умолчанию он будет показывать прозрачный бар. в котором контроллер не требуется прозрачный бар просто обновить currentNavigationType свойства оттуда, как показано ниже -

class VCNotTransparent: MainVC { 

override func viewWillAppear(_ animated: Bool) { 
    self.currentNavigationType = .notTransparent 
    super.viewWillAppear(animated) 

    } 
} 
+0

спасибо, это выглядит как хорошее направление для решения, я ценю это. Одна вещь, которая отсутствует для меня, чтобы отметить как принятую, заключается в том, что я не понимаю, что будет для кода непрозрачным (внутри func setupNav ...). Поскольку я использовал пустой образ, чтобы сделать фон прозрачным, я не уверен, как вернуть его в непрозрачный. – Sharonica

+0

Попробуйте это, возможно, это поможет вам - http://stackoverflow.com/questions/42332547/swift-3-how-to-reverse-a-transparent-navigation-bar –

+0

Спасибо, это помогает немного, но у него есть проблема, возвращаясь к прозрачной панели из непрозрачной, панель становится прозрачной только в задержке (хотя я поместил изменения в правильные функции в жизненном цикле vc) – Sharonica