与Spotify或Apple应用程序在播放歌曲时所做的类似,它在UITabBar之上放置了一个自定义视图:

我尝试过的解决方案:

问题:嵌入到UITabBarController底部的ViewControllers中的任何内容都不会显示,因为它们隐藏在自定义布局后面。我尝试过在size forChildContentContainer中重写UITabBarController,尝试更新底层布局指南,什么都没有。我需要调整UITabBarController.的容器视图框架的大小。

但是现在我有了多个自定义视图的实例。如果我想更改标签,必须将其更改为所有视图。或隐藏等
class MyCustomTabBar : UITabBar {}实例覆盖该属性,则不会出现选项卡!是的,我将myCustomTabBar的代表设置为self。倾向于#3,但寻找一个更好的解决方案。
发布于 2020-05-15 07:30:28
除非我误解了,否则您可以从UITabBarController类创建一个自定义视图。然后,您可以将它插入在之上,并将其约束到tabBar对象,这是与控制器的tabBar关联。
因此,在您的UITabBarController类中,创建自定义视图
class CustomTabBarController: UITabBarController {
var customView: UIView = {
let bar = UIView()
bar.backgroundColor = .white
bar.translatesAutoresizingMaskIntoConstraints = false
return bar
}()在viewDidLoad()中,将您的自定义视图添加到UITabBarController的视图对象中,并将其放在之上的tabBar对象之上
override func viewDidLoad() {
super.viewDidLoad()
...
self.view.insertSubview(customView, aboveSubview: tabBar)然后,在将自定义视图添加为subView之后,添加约束,以便正确定位。这也应该在viewDidLoad()中完成,但必须在插入视图之后才能完成。
self.view.addConstraints([
NSLayoutConstraint(item: customView, attribute: .leading, relatedBy: .equal, toItem: tabBar, attribute: .leading, multiplier: 1, constant: 0),
NSLayoutConstraint(item: customView, attribute: .trailing, relatedBy: .equal, toItem: tabBar, attribute: .trailing, multiplier: 1, constant: 0),
NSLayoutConstraint(item: customView, attribute: .top, relatedBy: .equal, toItem: tabBar, attribute: .top, multiplier: 1, constant: -50),
NSLayoutConstraint(item: customView, attribute: .bottom, relatedBy: .equal, toItem: tabBar, attribute: .top, multiplier: 1, constant: 0)
])有许多创造性的方法可以设置约束来执行您想做的事情,但是上面的约束应该附加一个高度为50的tabBar之上的视图。
https://stackoverflow.com/questions/42384470
复制相似问题