Как удалить панель вкладок из вида, имеющего две панели вкладок друг над другом? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу удалить черную панель вкладок с экрана A.Я попытался сделать приведенный ниже код на экране, но он удаляет белый.

override func viewDidLoad() {
        super.viewDidLoad()
        self.tabBarController?.tabBar.isHidden = true

    }

tab bars enter image description here

Ответы [ 2 ]

1 голос
/ 22 мая 2019

по моему мнению, это не очень хороший пользовательский опыт для пользователей iOS, но в любом случае, пожалуйста, попробуйте следующий подход, и он будет работать нормально с вами

1 - прежде всего, попытайтесь построить следующую иерархию вваш stroyboard

enter image description here

обратите внимание, что серый контроллер вида не UITabBarController, это просто UIViewController, но он содержит UITabBar объект

2 - необходимо указать красный контроллер вида stroyboard id " RedViewController ", а также дать синий контроллер вида " BlueViewController "

3 - дать вложенный UITabBarItem тег 0 для первого UITabBarItem, который назвал «Favorite», и дать tag 1 для второго UITabBarItem, который назвал «more»

enter image description here 4 - наконец добавьте следующий класс к UIViewController, имеющему объект UITabBar, в нашем примере это будет серый контроллер вида

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()
    }
  }
}
0 голосов
/ 21 мая 2019
tabBarController?.parent?.tabBarController?.tabBar.isHidden = true

Делая магию, но вы должны быть уверены, что viewDidLoad вызывается.

...