Как скрыть UITabBar при возвращении в UINavigationController

У меня есть три viewController'а:

  • FeedController (UITabBar виден)
  • Постконтроллер (UITabBar скрыт)
  • UserController (UITabBar виден

Я делаю это с помощью следующего кода от FeedController до PostController:

let postVC = PostController()
postVC.hidesBottomBarWhenPushed = true
pushViewController(postVC, animated: true)
postVC.hidesBottomBarWhenPushed = false

Затем из PostVC в UserVC:

let userVC = UserController()
userVC.hidesBottomBarWhenPushed = false
pushViewController(userVC, animated: true)

Это прекрасно работает. Он показывает UITabBar везде, кроме перехода к сообщению. Однако проблема возникает, когда я перехожу к профилю пользователя (UserController) из сообщения. Он показывает UITabBar в профиле, как и предполагалось, но когда я возвращаюсь назад (используя кнопку «Назад» в моем UINavigationController), UITabBar все еще виден. Я хочу, чтобы он снова был скрыт, когда я вернусь из userVC в postVC.

Есть ли способ сделать это?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

попробуйте в своем посте viewController:

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

Это вызовет его, когда вид вот-вот исчезнет, ​​но не тогда, когда он появится, поэтому он должен скрыться, когда вы вернетесь.

Это невероятно и делает именно то, что мне нужно. Я играл с viewWillAppear и viewWillDisappear, но я всегда работал с другим viewController (например, меняя postVC с willDisappear пользователя VC). Это здорово, большое спасибо!

PennyWise 21.03.2019 13:43

@PennyWise Приятно слышать! Я много раз попадал в ситуации, подобные вашей, и ответ всегда приходит, когда я делаю перерыв или занимаюсь чем-то другим! Подумайте, как легко попасться на том, что вы смотрите не туда, когда вы действительно сосредоточены, удачи!

Peter Ruppert 21.03.2019 14:04

Боюсь, сначала я был слишком взволнован. Когда я реализую это, кажется, что все работает нормально, однако, если я перехожу к другому viewController из userVC, он также скрывает tabBar, хотя тогда он также должен отображаться снова. Поэтому в настоящее время я ищу способ показать это только тогда, когда я уверен, что кнопка «Назад» была нажата, но пока безуспешно.

PennyWise 23.03.2019 16:14

@PennyWise — это кнопка «Назад», созданная вами, кнопка «Назад» на панели навигации или что-то еще?

Peter Ruppert 24.03.2019 15:57

@PennyWise первое, что приходит на ум, это если, например, его кнопку, которую вы сделали, вы могли бы создать переменную var backButtonPressed = false и в коде кнопки установить для нее значение true и иметь там функцию отклонения, а в viewWillDissapear вам просто нужно if backButtonPressed == true { затем скрыть tabBar , а если они неправды, то вернитесь, не скрывая этого. Это звучит правильно?

Peter Ruppert 24.03.2019 16:00

Имеет смысл! В конце концов я исправил это, проверив .isMovibgFromParent, если это правда, то нажата кнопка «Назад» (это navigationBackButton). Так что я могу понять это довольно хорошо прямо сейчас. Имеются некоторые трудности с другими вкладками (я использую navigationController и tabBarController), которые могут напрямую обращаться к сообщениям и пользователям (например, вкладка ленты и вкладка поиска могут как переходить к пользователям, так и к сообщениям). Так что, если я переключаюсь между ними, иногда это не так, как ожидалось, но, думаю, я разберусь с этим позже. На данный момент первая вкладка работает отлично, если проверить isMovingFromParent!

PennyWise 24.03.2019 16:05

@PennyWise Круто! Лучший совет, который я мог бы дать, — записать или найти способ визуализировать все возможные переходы, навигацию и т. д., и вы можете обнаружить что-то, что может помочь. Удачи!

Peter Ruppert 24.03.2019 16:08

Другие вопросы по теме