Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在UITabBarController中的选项卡和导航视图之间添加UIView_Swift_Uitabbarcontroller_Uitabbar - Fatal编程技术网

Swift 在UITabBarController中的选项卡和导航视图之间添加UIView

Swift 在UITabBarController中的选项卡和导航视图之间添加UIView,swift,uitabbarcontroller,uitabbar,Swift,Uitabbarcontroller,Uitabbar,我正在处理一个项目,该项目使用uitabarcontroller显示所有不同的UIViewControllers,但现在我需要在选项卡栏和导航视图之间添加一个迷你播放器(ViewControllers也必须调整大小) 我是否可以通过重用现有类来实现这一点 编辑 我尝试了两种方法: 1-将其添加到视图中。已添加但高于VCs let aView = UIView() view.addSubview(aView) aView.backgroundColor = .white aView.anchor(

我正在处理一个项目,该项目使用
uitabarcontroller
显示所有不同的
UIViewControllers
,但现在我需要在
选项卡栏和导航视图之间添加一个迷你播放器(
ViewControllers
也必须调整大小)

我是否可以通过重用现有类来实现这一点

编辑 我尝试了两种方法:

1-将其添加到视图中。已添加但高于VCs

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-将其添加到选项卡栏中。这听起来可能很傻,但我认为它会起作用

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))
直接设置视图的框架属性。
此外,您还需要在视图中将显示方法中执行此操作。

将视图作为子视图添加到UITabBarViewController的视图,而不是选项卡栏本身。只需将其放置在选项卡栏上方

也改变了:

aView.anchor(top: nil, leading: view.leadingAnchor, bottom: tabBar.topAnchor, trailing: view.trailingAnchor, size: .init(width: 0, height: 100))
直接设置视图的框架属性。
此外,您还需要在“视图中显示”方法中执行操作。

您可以尝试以下方法:

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个像素的空白,这样就不会有任何内容隐藏在您的播放器视图后面

  • 或者您已经添加了:

    • 容器视图
      ui视图
      与添加的播放器视图相同
    • 在这种情况下,您必须添加视图控制器的视图,其中导航控制器作为子视图(请参阅:)

  • 您可以这样尝试:

    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个像素的空白,这样就不会有任何内容隐藏在您的播放器视图后面

  • 或者您已经添加了:

    • 容器视图
      ui视图
      与添加的播放器视图相同
    • 在这种情况下,您必须添加视图控制器的视图,其中导航控制器作为子视图(请参阅:)

  • 你试了什么?@ShauketSheikh有用吗?你试了什么?@ShauketSheikh有用吗?是的。您只需要为嵌入式VC配置偏移量。否则,您需要将视图作为子视图添加到嵌入式VC。如何更改偏移量?我的意思是您需要偏移嵌入式VC的内容。只需通过嵌入式VC中的约束即可。是的。您只需要为嵌入式VC配置偏移量。否则,您需要将视图作为子视图添加到嵌入式VC。如何更改偏移量?我的意思是您需要偏移嵌入式VC的内容。只需通过嵌入式VC内部的约束。