我想在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()
}