AVPlayerViewController和View的约束

时间:2016-06-23 12:25:06

标签: ios swift2 avplayerviewcontroller

我正在使用AVPlayerViewController开发我的第一个应用程序。我需要在视图中使用此类显示视频流。在屏幕截图中,此视图具有深蓝色。在这个视图下我有Label和UICollectionView。当我点击项目时,会显示视频,但此视图的大小有问题,大小已更改,视图下的标签变得不可见,视图顶部也有间隙。我使用AutoLayout设置约束并且它们是正确的,XCode没有显示布局问题,但是在运行期间点击项目以启动视频后,XCode显示了很多带有约束的错误。 这就是布局的外观,没有错误或警告。

Layout

这就是应用启动时的样子 app starts

当我点击UICollectionView的项目时,这是一个布局问题,因为你可以看到带控制器的AVPlayer没有填充深蓝色视图(留下自由空间),也改变了它的大小,因此标签不可见。此控制器的按钮也不起作用,当我点击视频时会出现。 problem with layout

这是我为AVPlayerViewController设置框架的代码,myView是一个深蓝色的视图。

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

        let url = NSURL(string:"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8")
        playerController.player = player
        self.addChildViewController(playerController)
        self.myView.addSubview(playerController.view)
        playerController.view.frame = self.myView.frame
        let playerItem = AVPlayerItem(URL: url!)
        player.replaceCurrentItemWithPlayerItem(playerItem)
        player.play()   
    }

执行此代码后输出中出现错误:

  

无法同时满足约束条件。可能至少有一个   以下列表中的约束是您不想要的。尝试   这个:(1)看看每个约束并试着弄清楚你是哪个   不要指望; (2)找到添加了不需要的约束的代码   或约束并修复它。

1 个答案:

答案 0 :(得分:1)

我在Storyboard上添加了Container View,AVKit Player View Controller而不是视图,并在它们之间建立了连接,还为ViewController添加了一个代码:

let child = childViewControllers[0] as! AVPlayerViewController
child.view.clipsToBounds = true
child.player = player

现在可行了