如何从具有两个标签栏的视图中删除标签栏?
How to remove a tab bar from view having two tab bars on top of each other?
我想从 A 屏幕上删除黑色标签栏。我尝试执行下面的代码来筛选,但它删除了白色代码。
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = true
}
tabBarController?.parent?.tabBarController?.tabBar.isHidden = true
施展魔法,但您必须确保调用了 viewDidLoad。
在我看来,这对 iOS 用户来说不是一个好的用户体验,但无论如何请尝试以下方法,它会很好地工作
1- 首先尝试在你的 stroyboard 中构建以下层次结构
请注意,灰色视图控制器不是 UITabBarController
,它只是一个 UIViewController
,但它包含一个 UITabBar
对象
2- 你需要给红色视图控制器 stroyboard
id "RedViewController" 并且给蓝色视图控制器 "BlueViewController"
3- 为第一个名为 "Favorite" 的 UITabBarItem 提供嵌套的 UITabBarItem
tag 0 并提供 tag 1 对于第二个 UITabBarItem 命名为 "more"
4- 最后将以下 class 添加到具有 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()
}
}
}
我想从 A 屏幕上删除黑色标签栏。我尝试执行下面的代码来筛选,但它删除了白色代码。
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = true
}
tabBarController?.parent?.tabBarController?.tabBar.isHidden = true
施展魔法,但您必须确保调用了 viewDidLoad。
在我看来,这对 iOS 用户来说不是一个好的用户体验,但无论如何请尝试以下方法,它会很好地工作
1- 首先尝试在你的 stroyboard 中构建以下层次结构
请注意,灰色视图控制器不是 UITabBarController
,它只是一个 UIViewController
,但它包含一个 UITabBar
对象
2- 你需要给红色视图控制器 stroyboard
id "RedViewController" 并且给蓝色视图控制器 "BlueViewController"
3- 为第一个名为 "Favorite" 的 UITabBarItem 提供嵌套的 UITabBarItem
tag 0 并提供 tag 1 对于第二个 UITabBarItem 命名为 "more"
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()
}
}
}