我正在使用AVPlayerViewController开发我的第一个应用程序。我需要在视图中使用此类显示视频流。在屏幕截图中,此视图具有深蓝色。在这个视图下我有Label和UICollectionView。当我点击项目时,会显示视频,但此视图的大小有问题,大小已更改,视图下的标签变得不可见,视图顶部也有间隙。我使用AutoLayout设置约束并且它们是正确的,XCode没有显示布局问题,但是在运行期间点击项目以启动视频后,XCode显示了很多带有约束的错误。 这就是布局的外观,没有错误或警告。
当我点击UICollectionView的项目时,这是一个布局问题,因为你可以看到带控制器的AVPlayer没有填充深蓝色视图(留下自由空间),也改变了它的大小,因此标签不可见。此控制器的按钮也不起作用,当我点击视频时会出现。
这是我为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)找到添加了不需要的约束的代码 或约束并修复它。
答案 0 :(得分:1)
我在Storyboard上添加了Container View,AVKit Player View Controller而不是视图,并在它们之间建立了连接,还为ViewController添加了一个代码:
let child = childViewControllers[0] as! AVPlayerViewController
child.view.clipsToBounds = true
child.player = player
现在可行了