我试图让AVPlayerLayer
填满单元格区域,但是通过设置框架属性,它不会改变它的大小。
在我的自定义单元格文件中:
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL! as URL)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = contentView.bounds;
contentView.layer.addSublayer(playerLayer)
player.play()
}
然后在我的uitableviewcontroller
文件中:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "clipHomeCells", for: indexPath) as! ClipTableViewCell
// Configure the cell...
return cell
}
但它看起来像这样:
答案 0 :(得分:0)
CALayer
个对象在展开时不会自动调整大小以填充它们所属的视图。因此,图层仍然具有您最初给出的相同框架。如果由于自动布局或heightForRow(at:)
委托方法而导致单元格大小稍后更改,则CALayer
框架将不会更新以匹配。
我过去处理此问题的方法是创建UITableViewCell
的自定义子类,管理CALayer
并在layoutSubviews()
中对其进行适当调整。
答案 1 :(得分:0)
我遇到了同样的问题,解决方案是改用UICollectionView,或者在这种情况下,如果视频层的大小与cell.view相同,则可以在cellForRowAtIndexPath中使用playerLayer.frame = cell.bounds。