返回UINavigationController时如何隐藏UITabBar

Posted

技术标签:

【中文标题】返回UINavigationController时如何隐藏UITabBar【英文标题】:How to hide UITabBar when going back in UINavigationController 【发布时间】:2019-03-21 12:31:51 【问题描述】:

我有三个视图控制器:

FeedController(UITabBar 可见) PostController(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 时,我希望它再次被隐藏。

有什么办法可以做到吗?

【问题讨论】:

【参考方案1】:

在您的帖子视图控制器中尝试:

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

它会在视图即将消失时调用它,但在它出现时不会调用它,因此当您返回时它应该隐藏。

【讨论】:

这太棒了,完全符合我的需要。一直在玩 viewWillAppear 和 viewWillDisappear,但我一直在使用另一个 viewController(例如,从 userVC 的 willDisappear 更改 postVC)。太好了,非常感谢! @PennyWise 很高兴听到!我发现自己多次陷入与您类似的情况,而答案总是在休息或做其他事情时出现!想想当你真正专注的时候很容易陷入寻找错误的地方,祝你好运! 我担心一开始我有点太兴奋了。当我实现它时,一切似乎都正常,但是,如果我从 userVC 转到另一个 viewController,它也会隐藏 tabBar,而它也应该再次显示。所以我目前正在寻找一种方法,只在我确定点击后退按钮时才显示它,到目前为止,没有运气。 @PennyWise 是您制作的后退按钮、导航栏后退按钮还是其他? @PennyWise 首先想到的是,例如,如果您制作了它的按钮,您可以创建一个变量 var backButtonPressed = false 并在您的按钮代码中将其设置为 true 并在那里设置您的关闭功能,然后在viewWillDissapear 你只需要if backButtonPressed == true 然后隐藏tabBar,如果它们不是真的,然后不隐藏就返回。听起来对吗?

以上是关于返回UINavigationController时如何隐藏UITabBar的主要内容,如果未能解决你的问题,请参考以下文章

返回UINavigationController时如何隐藏UITabBar

UINavigationController 应用程序在单击“返回”按钮时崩溃

为啥在 UINavigationController 应用程序中单击返回上一屏幕时有时会丢失导航项?

如何隐藏 UINavigationController 中的“返回”按钮?

返回 UINavigationController 根视图时调用了哪些方法?

UINavigationController:如何管理取消按钮和返回按钮