在 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)
}
}
并确保所有其他视图控制器(将在标签栏内导航)相应地调整框架。
要么你必须管理所有视图控制器的底部视图向上 30 像素并在底部保持 30 像素 space 空白,这样你的播放器视图后面就没有任何内容隐藏了。
或者你有你添加:
- 容器视图
UIView
与添加的播放器视图相同。
- 因为你必须添加带有导航控制器的视图控制器视图作为子视图(参考:Adding a view controller as a subview in another view controller)。
我正在开发一个项目,该项目使用 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)
}
}
并确保所有其他视图控制器(将在标签栏内导航)相应地调整框架。
要么你必须管理所有视图控制器的底部视图向上 30 像素并在底部保持 30 像素 space 空白,这样你的播放器视图后面就没有任何内容隐藏了。
或者你有你添加:
- 容器视图
UIView
与添加的播放器视图相同。 - 因为你必须添加带有导航控制器的视图控制器视图作为子视图(参考:Adding a view controller as a subview in another view controller)。
- 容器视图