在 UITabBarController 中的 tabBar 和导航视图之间添加 UIView

Addding UIView between tabBar and Navigation view in UITabBarController

我正在开发一个项目,该项目使用 UITabBarController 来显示所有不同的 UIViewControllers,但现在我需要在 tabBar 和导航之间添加一个迷你播放器视图(ViewControllers 也必须调整大小)。

无论如何我可以通过重用现有的 class 来实现吗?

编辑 我试过两种方法:

1- 将其添加到视图中。获得添加但高于 VC

let aView = UIView()
view.addSubview(aView)
aView.backgroundColor = .white
aView.anchor(top: nil, leading: view.leadingAnchor, bottom: tabBar.topAnchor, trailing: view.trailingAnchor, size: .init(width: 0, height: 100))

2- 将其添加到 tabBar 中。这听起来可能很傻,但我认为它会起作用。

let viewOverTabBar = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
viewOverTabBar.backgroundColor = UIColor.black
tabBar.addSubview(viewOverTabBar)

将您的视图作为子视图添加到 UITabBarViewController 的视图而不是标签栏本身。只需将它放在标签栏上方即可。

同时更改:

aView.anchor(top: nil, leading: view.leadingAnchor, bottom: tabBar.topAnchor, trailing: view.trailingAnchor, size: .init(width: 0, height: 100))

直接设置视图的框架 属性。 您还需要在 viewWillAppear 方法中执行此操作。

你可以这样试试:

class MyTabBarController: UITabBarController {

     override func viewDidLoad() {
         super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

     override func viewWillAppear(_ animated: Bool) {
         super.viewWillAppear(animated)
         self.createSmallPlayer()
    }

    func createSmallPlayer() {

        let viewOverTabBar = UIView(frame: CGRect(x: 0, y: self.tabBar.frame.origin.y-40, width: self.tabBar.frame.size.width, height: 30))
        viewOverTabBar.backgroundColor = UIColor.brown

        //viewOverTabBar.layer.cornerRadius = viewOverTabBar.frame.size.height/2
        viewOverTabBar.layer.masksToBounds = false
        viewOverTabBar.layer.shadowColor = UIColor.black.withAlphaComponent(0.5).cgColor
         viewOverTabBar.layer.shadowRadius = 5.0
        viewOverTabBar.layer.shadowOffset = CGSize(width: 0.0, height: -5.0)
        viewOverTabBar.layer.shadowOpacity = 0.5

        //tabBar.addSubview(viewOverTabBar)
        view.addSubview(viewOverTabBar)
    }
}

并确保所有其他视图控制器(将在标签栏内导航)相应地调整框架。

  1. 要么你必须管理所有视图控制器的底部视图向上 30 像素并在底部保持 30 像素 space 空白,这样你的播放器视图后面就没有任何内容隐藏了。

  2. 或者你有你添加:

    • 容器视图UIView与添加的播放器视图相同。
    • 因为你必须添加带有导航控制器的视图控制器视图作为子视图(参考:Adding a view controller as a subview in another view controller)。