0

我正在尝试实现MDCBottomNavigationBar包含 a 的 a MDCTabBarView,而后者又包含 2 个其他视图(显示为选项卡式)。

在我的主控制器中,我为底部的菜单项创建了 4 个控制器并实现了 MDCTabBarViewDelegate。当用户点击底部菜单项时,他们会看到相应的控制器。现在我希望其中一个控制器在顶部包含一个选项卡栏,如下面的演示图像所示。我用 2 个控制器创建了相同的 MDCTabBarViewDelegate 并将它们添加到视图中。每当我更改选项卡时,它们都会显示并且它们会切换,但它的外观存在问题。因此,Tab 2应该包含带有App和的标签栏All,并且在标签栏下方,应该显示每个标签的内容。

请检查此图像: 模拟器演示图像

绿色区域实际上应该是Tab 2->的内容App。问题是绿色区域显示在整个屏幕上,而不是显示在标签栏下方。第二个问题是我的视图控制器在底部菜单上方显示了一个褪色的栏。我试图隐藏那个栏,navigationController?.navigationBar.isHidden = true但似乎没有任何效果。

有人可以帮我解决上述两个问题吗?我找不到有关如何在 iOS 上使用此组件的单一资源/文档。如果您甚至可以分享一些我可以自己阅读的文档(如果不是答案),那就太好了。

父视图控制器:

class HomeController: UITabBarController {
    let firstC = FirstController()
    let secondC = SecondController()
    let thirdC = ThirdControllerController()
    let fourthC = FourthController()
    
    let bottomNavBar: MDCBottomNavigationBar = {
        let bottomNavBar = MDCBottomNavigationBar()
        
        bottomNavBar.titleVisibility = .always
        bottomNavBar.alignment = .justifiedAdjacentTitles
        
        return bottomNavBar
    }()
    
    let firstItem: MDCTabBarItem = {
        let firstItem = MDCTabBarItem()
        
        firstItem.title = "Tab 1"
        firstItem.image = UIImage(systemName: "house.fill")
        firstItem.tag = 0
        
        return firstItem
    }()
    
    let secondItem: MDCTabBarItem = {
        let secondItem = MDCTabBarItem()
        
        secondItem.title = "Tab 2"
        secondItem.image = UIImage(systemName: "house.fill")
        secondItem.tag = 1
        
        return secondItem
    }()
    
    let thirdItem: MDCTabBarItem = {
        let thirdItem = MDCTabBarItem()
        
        thirdItem.title = "Tab 3"
        thirdItem.image = UIImage(systemName: "house.fill")
        thirdItem.tag = 2
        
        return thirdItem
    }()
    
    let fourthItem: MDCTabBarItem = {
        let fourthItem = MDCTabBarItem()
        
        fourthItem.title = "Tab 4"
        fourthItem.image = UIImage(systemName: "house.fill")
        fourthItem.tag = 3
        
        return fourthItem
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        bottomNavBar.delegate = self
        
        bottomNavBar.items = [firstItem, secondItem, thirdItem, fourthItem]
        self.viewControllers = [
                firstC,
                secondC,
                thirdC,
                fourthC
            ]
        
        view.addSubview(bottomNavBar)
    }
}

// SecondC - inner controller

class SecondController: UITabBarController {
    let firstC = TabFirstC()
    let secondC = TabSecondC()

    let firstTab: MDCTabBarItem = {
        let tab = MDCTabBarItem(title: "App", image: nil, tag: 0)
        
        return tab
    }()
    
    let secondTab: MDCTabBarItem = {
        let tab = MDCTabBarItem(title: "All", image: nil, tag: 1)
        return tab
    }()
    
    let tabs: MDCTabBarView = {
        let tabs = MDCTabBarView()
        tabs.translatesAutoresizingMaskIntoConstraints = false
        return tabs
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.addSubview(tabs)
        
        viewControllers = [firstC, secondC]
        tabs.tabBarDelegate = self
        tabs.items = [firstTab, secondTab]
        tabs.selectedItem = firstTab
        
        
        NSLayoutConstraint.activate([
            tabs.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
            tabs.topAnchor.constraint(equalTo: logoImageView.safeAreaLayoutGuide.bottomAnchor, constant: 10),
            tabs.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor),
        ])

    }
}

4

0 回答 0