【发布时间】:2019-11-01 16:50:57
【问题描述】:
我有一个使用 xib 作为其单元格的集合视图。在那个 xib 中,我有一个带有自定义类 VideoView 的 UIView,它看起来像这样:
import UIKit
import AVKit
import AVFoundation
/**
Source: https://medium.com/@rodrigo_freitas/a-simple-ios-view-to-play-video-b7ee05f9ce6a
*/
class VideoView: UIView {
var playerLayer: AVPlayerLayer?
var player: AVPlayer?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func configure(url: String) {
if let videoURL = URL(string: url) {
player = AVPlayer(url: videoURL)
playerLayer = AVPlayerLayer(player: player)
playerLayer?.frame = bounds
playerLayer?.videoGravity = AVLayerVideoGravity.resizeAspect
if let playerLayer = self.playerLayer {
layer.addSublayer(playerLayer)
}
}
}
func play() {
if player?.timeControlStatus != AVPlayer.TimeControlStatus.playing {
player?.play()
}
}
func pause() {
player?.pause()
}
func stop() {
player?.pause()
player?.seek(to: CMTime.zero)
}
}
这是我的单元格 xib 的样子:
https://i.stack.imgur.com/xJ4DC.png
如您所见,约束设置为超级视图(即拉伸到全宽/全高)。
问题是视频没有占据整个集合视图控制器的宽度(红色背景是完整的单元格大小):
https://i.stack.imgur.com/DlH4Q.png
如您所见,视频没有拉伸到全宽。
我认为这与 xib 的宽度和高度是静态高度 (360x640) 和 VideoView 类中的这一行使用该宽度/高度来设置视频大小的事实有关:
playerLayer?.frame = bounds
但我不知道如何更改此设置以使视频与集合视图控制器的宽度匹配。
【问题讨论】:
标签: ios swift xcode swift4 xib