我有TabBar
个标签。在某些时候,从两个标签中的任何一个,我想添加一个在两个标签视图上都可见但在TabBar
后面的视图。
所以我想,将子视图插入TabBarController
但在TabBar
下面。
这在原则上工作得很好,我有TabBar
背后的视图,但现在覆盖了我想要的2个标签。但是,它实际上并没有加载。只是后台加载,只调用viewDidLoad()
,不 viewWillAppear()
或其他任何内容。
我也尝试在addChildViewController(myVC)
上调用TabBarController
无效,并且在我添加的视图控制器上手动调用viewWillAppear()
也没有效果(我和#39} ; m还怀疑是否允许手动调用viewWillAppear()
?)。
我正在尝试做什么?我错过了什么?或者我应该以其他方式尝试这个吗?
答案 0 :(得分:2)
出于某种原因,当将子视图插入UITabBarController
后面的UITabBar
时,尽管用户可以看到该视图,但系统本身似乎认为它不是,所以虽然{{1调用viewDidLoad()
,后续方法不是。
但是,在viewDidAppear()
上方添加子视图似乎工作正常。所以我通过将自己的新UITabBar
作为子视图添加到UITabBar
(基本上与默认设置完全相同),然后删除UITabBarController
默认{{1} }。
然后,当我稍后将我的视图插入UITabBarController's
时,我会按照原来的方式插入它,而不是在我的自定义UITabBar
之下/之后插入它,它似乎可以正常加载。
答案 1 :(得分:1)
这将是一个好方法:
添加以下功能,并在初始VC的viewDidLoad
中调用它。它会展开您的标签栏控制器实例(这是可选的),然后在标签栏下方插入您始终想要显示的视图。
private func setupAlwaysVisibleView() {
guard let tabBarController = self.tabBarController else { return }
tabBarController.view.insertSubview(alwaysVisibleView, belowSubview: tabBarController.tabBar)
}
答案 2 :(得分:0)
无需删除并重新创建tabBar。您需要做的是在插入自定义视图后,然后再将tabBar带到前面。
//bring the tabBar to the front after inserting new view
self.view.bringSubview(toFront: self.tabBar)
答案 3 :(得分:0)
您也可以在UITabViewController的init()方法中执行此操作:
view.insertSubview(alwaysVisibleView, belowSubview: self.tabBar)
如果您使用的是UITabViewController的子类,则无需调度到另一个方法。
答案 4 :(得分:0)
避免为tabBarController使用可选参数或删除当前的tabBar。只需在tabBar视图下添加您的视图。 Swift 5,XCode 11。
class TabBarController: UITabBarController {
@IBOutlet var instructionsView: UIView!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.view.insertSubview(instructionsView, belowSubview: self.tabBar)
}
}