在 UITabBarController 中的标签栏和导航视图之间添加 UIView

Posted

技术标签:

【中文标题】在 UITabBarController 中的标签栏和导航视图之间添加 UIView【英文标题】:Addding UIView between tabBar and Navigation view in UITabBarController 【发布时间】:2019-06-07 09:16:52 【问题描述】:

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

有没有我可以通过重用现有的类来实现这一点?

编辑 我尝试了两种方法:

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)

【问题讨论】:

你尝试了什么? @ShauketSheikh 有帮助吗? 【参考方案1】:

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

也改变:

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

直接设置视图的框架属性。 你也需要在 viewWillAppear 方法中做。

【讨论】:

是的。您只需要为嵌入式 VC 配置偏移量。否则,您需要将视图作为子视图添加到嵌入式 VC。 如何更改偏移量? 我的意思是你需要偏移嵌入VC的内容。只需通过嵌入式 VC 中的约束。 @NikR,你能解释一下为什么它应该在viewDidAppear。我首先将它添加到viewDidLoad,然后 UITabBarViewController 得到一个新的阴影项。就像我们在上面添加一个新的项目选项卡一样。【参考方案2】:

你可以试试这个方法:

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)
    

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

    要么您必须将所有视图控制器的底部视图向上管理 30 像素,并在底部保持 30 像素空间空白,因此您的播放器视图后面不会隐藏任何内容。

    或者你有你添加:

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

【讨论】:

以上是关于在 UITabBarController 中的标签栏和导航视图之间添加 UIView的主要内容,如果未能解决你的问题,请参考以下文章

从ios中的UITabBarController中删除标签栏的安全方法

嵌入在 NavigationController 中的 UITabBarController

单击 UITabBarController 时的自定义操作

从 UITabBarController 选项卡根视图呈现 UINavigationController

如何在 UITabBarController 中垂直居中系统图像

ios 6 中的 UITabBarController 旋转问题