如何在tableview单元格中通过url预览元数据?



我想在tableview单元格中通过url预览元数据,我使用linkpresentation。一切正常,但当我滚动tableview时,项目总是相互交换位置。我找不到哪里出错了

这是我tableViewCell代码:

var urlString: String?
var previewCell: LinkModel? {
didSet {

urlString = previewCell?.linkURL

fetchPreview()
}
}
let linkPreview = LPLinkView()
var provideer = LPMetadataProvider()

override init(frame: CGRect) {
super.init(frame: frame)
contentView.backgroundColor = .black

}
fileprivate func fetchPreview() {
guard let url = URL(string: urlString ?? "") else {return}
provideer = LPMetadaProvider()
provideer.startFetchingMetadata(for: url) { metaData, error in
guard let data = metaData, error == nil else {


return
}
DispatchQueue.main.async  {
self.linkPreview.metadata = data
self.contentView.addSubview(self.linkPreview)
self.linkPreview.frame = (self.contentView.bounds)
}
}
}

and cellForRowAt:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let listLinkCell = tableView.dequeueReusableCell(withIdentifier: LinkListCell.linkListCellID, for: indexPath) as! LinkListCell
listLinkCell.selectionStyle = .none

listLinkCell.previewCell = listLink[indexPath.row]
listLinkCell.linkDelegate = self

return listLinkCell
}

在您的LinkListCell类中尝试重写prepeareForReuse函数-以便将单元格重置为默认状态

override func prepareForReuse() {
super.prepareForReuse()
//set cell to initial state here 
provideer.cancel()
linkPreview.metadata = LPLinkMetadata()
}

最新更新