在UIView中嵌入AVPlayerViewController

7
我正在尝试在UIView内播放视频,但视频播放器总是出现在我嵌入AVPlayerViewController的UIView之外。
以下是我目前所拥有的....
class ViewController: UIViewController {

    let smallVideoPlayerViewController = AVPlayerViewController()

    @IBOutlet weak var videoView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let myFileManager = FileManager.default
        let mainBundle = Bundle.main
        let resourcesPath = mainBundle.resourcePath!

        guard let allItemsInTheBundle = try? myFileManager.contentsOfDirectory(atPath: resourcesPath) else {
            return
        }

       let videoName = "test"

       let videoPath = Bundle.main.path(forResource: videoName, ofType: "mp4")
       let videoUrl = URL(fileURLWithPath: videoPath!)

       smallVideoPlayerViewController.showsPlaybackControls = false
       smallVideoPlayerViewController.player = AVPlayer(url: videoUrl)

       videoView.addSubview(smallVideoPlayerViewController.view)

       smallVideoPlayerViewController.view.frame = videoView.frame

       smallVideoPlayerViewController.player?.play()
    }
 ...
}

UIView的背景颜色设置为白色。从屏幕截图可以看出,AVPlayer在UIView之外。

Output of the code above

我尝试手动设置AVPlayer的尺寸和位置,但也没有成功。

我正在使用Xcode 9.2。该项目没有关于任何布局问题的警告。

我应该如何完美地对齐AVPlayer,使其出现在UIView内部。

谢谢

1个回答

19

更改此行:

smallVideoPlayerViewController.view.frame = videoView.frame

到这个:

smallVideoPlayerViewController.view.frame = videoView.bounds

原因是因为videoView.frame包含其superview的原点,而您不需要这个。 videoView.bounds仅是一个以0,0为原点的大小。

当然,您可能还想进一步设置自动调整大小的掩码,以使视频播放器框架保持不变,如下所示:

smallVideoPlayerViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

甚至可以转向全自动布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接