如何从视图中删除两个标签栏相互重叠的标签栏?
Posted
技术标签:
【中文标题】如何从视图中删除两个标签栏相互重叠的标签栏?【英文标题】:How to remove a tab bar from view having two tab bars on top of each other? 【发布时间】:2019-05-21 09:05:36 【问题描述】:我想从 A 屏幕中删除黑色标签栏。我尝试执行下面的代码来筛选,但它删除了白色的。
override func viewDidLoad()
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = true
【问题讨论】:
为什么使用嵌套的 UITabBarController? 为 UITabBarController 创建了一个自定义类并隐藏了你需要的类 一般标签栏是用来管理一些 UIViewController 实例的,那你为什么要尝试用另一个 UITabBarController 实例来管理 UITabBarController 实例呢?请告诉我你到底想做什么? 在你的情况下很有趣,结果可能是self.tabBarController?tabBarController?.tabBar.isHidden = true
,因为你的标签栏控制器有一个标签栏控制器,你想隐藏它的标签栏。但正如其他人建议的那样,您可能应该重新考虑您的视图控制器层次结构,并在您的情况下避免使用 2 个选项卡栏控制器,或者尝试在按下该选项卡时显示第二个选项卡栏控制器。
@omartarek32 一旦按下第一个选项卡中的项目,我想在选项卡栏中显示 A 屏幕和蓝色屏幕。
【参考方案1】:
在我看来,这对 ios 用户来说不是一个好的用户体验,但无论如何请尝试以下方法,它会适合你
1- 首先构建尝试在您的 stroyboard 中构建以下层次结构
请注意,灰色视图控制器不是UITabBarController
,它只是一个UIViewController
,但它包含一个UITabBar
对象
2- 你需要给红色视图控制器stroyboard
id "RedViewController" 并且还要给蓝色视图控制器"BlueViewController"
3- 为名为“Favorite”的第一个 UITabBarItem 提供嵌套的UITabBarItem
tag 0,并为名为“more”的第二个 UITabBarItem 提供 tag 1 p>
4- 最后将以下类添加到具有UITabBar
对象的UIViewController
,在我们的示例中它将是灰色视图控制器
class SecondViewController: UIViewController
lazy var blueViewController: UIViewController? =
self.storyboard?.instantiateViewController(withIdentifier: "BlueViewController")
()
lazy var redViewController: UIViewController? =
self.storyboard?.instantiateViewController(withIdentifier: "RedViewController")
()
@IBOutlet weak var containerView: UIView!
@IBOutlet weak var nestedTabBar: UITabBar!
override func viewDidLoad()
super.viewDidLoad()
nestedTabBar.delegate = self
addRedViewController()
self.nestedTabBar.selectedItem = self.nestedTabBar.items?.first
func addBlueViewController()
if let redViewController = redViewController
redViewController.willMove(toParent: nil)
redViewController.view.removeFromSuperview()
redViewController.removeFromParent()
if let blueViewController = blueViewController
addChild(blueViewController)
blueViewController.view.frame = containerView.frame
containerView.addSubview(blueViewController.view)
blueViewController.didMove(toParent: self)
func addRedViewController()
if let blueViewController = blueViewController
blueViewController.willMove(toParent: nil)
blueViewController.view.removeFromSuperview()
blueViewController.removeFromParent()
if let redViewController = redViewController
addChild(redViewController)
redViewController.view.frame = containerView.frame
containerView.addSubview(redViewController.view)
redViewController.didMove(toParent: self)
extension SecondViewController: UITabBarDelegate
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem)
if item.tag == 0
addRedViewController()
else
addBlueViewController()
【讨论】:
谢谢。在深入了解它之后,我会尽量避免它。 不客气,如果您在该解决方案中遇到任何问题,请在此处发表评论【参考方案2】:tabBarController?.parent?.tabBarController?.tabBar.isHidden = true
施展魔法,但您必须确保调用了 viewDidLoad。
【讨论】:
以上是关于如何从视图中删除两个标签栏相互重叠的标签栏?的主要内容,如果未能解决你的问题,请参考以下文章
我在应用程序委托中加载的视图控制器(在导航控制器中)与标签栏重叠