2016-05-17 5 views
0

Ситуация:Скрыть/TabBar в ViewController петли

У меня есть несколько ViewControllers (все с NavigationBar), погруженные в TabBarController. У меня есть один конкретный ViewController (VC1), где я не хочу показывать TabBar. Оттуда вы можете перейти к другому конкретному ViewController (VC2), где необходимо снова отобразить TabBar.

Мое решение:

VC1

self.hidesBottomBarWhenPushed устанавливается в true по умолчанию

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {  
    self.hidesBottomBarWhenPushed = false 
} 

override func viewWillDisappear(animated: Bool) { 
    self.hidesBottomBarWhenPushed = true 
} 

VC2

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {  
    self.hidesBottomBarWhenPushed = true 
} 

override func viewWillDisappear(animated: Bool) { 
    self.hidesBottomBarWhenPushed = false 
} 

Пока все хорошо. Это, кажется, работает, но вы можете нажать другую VC1 от VC2 (тот же контроллер с разным содержанием) и, конечно, нажать другую VC2 от VC1 снова и так далее.

Проблема:

  1. Как только VC2 нажимается дважды из VC1TabBar всегда скрыты.
  2. Когда вы нажмете кнопку назад, чтобы перейти от VC1 обратно к VC2TabBar всегда скрыты.

enter image description here

ответ

1

Настройка только VC1

override func viewWillAppear(animated: Bool) { 
    self.tabBarController?.tabBar.hidden = true 
} 

override func viewWillDisappear(animated: Bool) { 
    self.tabBarController?.tabBar.hidden = false 
} 

Это проще архитектура

+0

Это прекрасно работает, однако TabBar теперь отображается без сдвига влево или влево. правильно. Есть ли простой способ изменить это? – eLwoodianer

0

Try изменения свойств в необходимых VC:

self.navigationController.toolbarHidden = YES; 
0

Попробуйте эти символы в viewWillApear для скрыть или показать, что это будет работать нормально.

Для VC1: - В этом вы хотите всегда скрывать затем добавить этот код

override func viewWillAppear(animated: Bool) { 
self.tabBarController?.tabBar.hidden = true 
} 

Для VC2: - В этом вы хотите всегда показывают затем добавить этот код

override func viewWillAppear(animated: Bool) { 
self.tabBarController?.tabBar.hidden = false 
} 

enter image description here Попробуйте это код, его работа отлично. Я также пробовал этот код в образце проекта.

1

Не помещайте логику в viewWillDisappear или prepareForSegue, так как вы не знаете, что такое поведение контроллера вид, что собирается быть представлены хочет , Вместо этого поместите логику в viewWillAppear.

Пусть каждый ViewController справляется со своим желаемым поведением и не пытается предвидеть, чего хочет цель. Тем более, что вы не всегда знаете, какая причина для viewWillDisappear или prepareForSegue - поэтому вы не можете реагировать соответствующим образом.

Смежные вопросы