在 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 选项卡根视图呈现 UINavigationController