【问题标题】: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 屏幕和蓝色屏幕。

标签: ios swift xcode uitabbarcontroller xcode-storyboard


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    相关资源
    最近更新 更多