我正在尝试实现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),
])
}
}