【问题标题】:How to set the metadata of LPLinkView to nil如何将 LPLinkView 的元数据设置为零
【发布时间】:2021-06-14 22:30:49
【问题描述】:

我在表格视图单元格中使用 LPLinkView。在滚动重用单元格时,最初会显示回收单元格的 LinkProvider,然后在网络调用完成后立即更改。我想准备电池以供重复使用。有没有办法将链接提供者元数据设置为零? (类似于 imagview.image = nil)

我将在 prepareForReuse 函数中完成。

【问题讨论】:

    标签: swift uitableview metadata reuseidentifier api-linkpreview


    【解决方案1】:

    你可以这样做 -

    class MyTableViewCell: UITableViewCell {
        let linkView = LPLinkView(frame: .zero)
        var metadataProvider = LPMetadataProvider()
        
        override func prepareForReuse() {
            super.prepareForReuse()
            
            // Cancel in-flight metadata fetch request
            metadataProvider.cancel()
    
            // Assign an empty metadata object, all properties inside this are nil
            linkView.metadata = LPLinkMetadata()
        }
        
        func populateData(json: [String: Any]) {
            if let link = json["link"] as? String, let url = URL(string: link) {
                metadataProvider = LPMetadataProvider()
                metadataProvider.startFetchingMetadata(for: url, completionHandler: { [weak self] (metadata, error) in
                    if let metadata = metadata, error == nil {
                        self?.linkView.metadata = metadata
                    }
                })
            }
        }
        
    }
    

    【讨论】:

    • 刚试了一下,这会抛出错误:由于未捕获的异常“NSGenericException”而终止应用程序,原因:“尝试开始在已经启动的 LPMetadataProvider 上获取。 LPMetadataProvider 是一次性对象。'
    • 它只是说不应重复使用LPMetadataProvider。每次开始获取元数据时,只需创建一个 LPMetadataProvider 的新实例。请参阅答案的编辑。
    • 感谢您的编辑。由于某种原因,性能仍然不是最佳的(它会在更改前短暂显示旧单元格的 url 而没有图标)
    • 设置一个空的元数据对象是我们能做的最好的事情——我们不能在LPLinkView 上强制刷新 UI。您可以做的是 - 隐藏此视图,直到获取元数据并在分配元数据后显示它。虽然这是隐藏的,但您可以显示任何占位符、activityIndi​​cator 视图以指示加载正在进行中。
    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多