AVPlayerLayer不会将大小更改为单元格的边界

时间:2017-01-27 21:12:45

标签: ios swift avfoundation

我试图让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
}

但它看起来像这样:

enter image description here

2 个答案:

答案 0 :(得分:0)

CALayer个对象在展开时不会自动调整大小以填充它们所属的视图。因此,图层仍然具有您最初给出的相同框架。如果由于自动布局或heightForRow(at:)委托方法而导致单元格大小稍后更改,则CALayer框架将不会更新以匹配。

我过去处理此问题的方法是创建UITableViewCell的自定义子类,管理CALayer并在layoutSubviews()中对其进行适当调整。

答案 1 :(得分:0)

我遇到了同样的问题,解决方案是改用UICollectionView,或者在这种情况下,如果视频层的大小与cell.view相同,则可以在cellForRowAtIndexPath中使用playerLayer.frame = cell.bounds。