Для загрузки WKWebView в UITableViewCell требуется некоторое время (только загрузка первой ячейки)

#ios #uitableview #uikit #wkwebview

Вопрос:

У меня есть a UITableViewCell , который содержит a WKWebView (моя цель-отобразить видео на YouTube из ячейки).

Вот что я попробовал:

 import UIKit; import WebKit

class ViewController: UIViewController {
    var displayCell = false {
        didSet { updateView() }
    }
    
    @IBOutlet weak var tableView: UITableView! {
        didSet { tableView.register(UINib(nibName: "VideoCell", bundle: .main), 
                                          forCellReuseIdentifier: "VideoCell") }
    }
    
    @IBAction func tapped() {
       displayCell.toggle()
       updateView()
    }

    private func updateView() {
        tableView.reloadData()
    }
}

extension ViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "VideoCell", for: indexPath) as! VideoCell
        if let url = URL(string: "https://www.youtube.com/embed/qxWwEPeUuAg") {
            cell.wkWebView.load(URLRequest(url: url))
        }
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        200
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        displayCell ? 1 : 0
    }    
}

final class VideoCell: UITableViewCell {
    @IBOutlet weak var wkWebView: WKWebView!
}
 

Нажатие на кнопку либо скрывает, либо показывает первую ячейку. Я понял, что задержка возникает при отображении видеосети, но только в первый раз. Я попытался даже не загружать URL-адрес, и задержка все равно возникает. Поэтому я предполагаю, что что-то не так с WKWebView тем, когда приложение сначала кэширует ячейку, этого больше не происходит, когда ячейка удаляется из очереди. Но я не могу найти, что именно.

Не могли бы вы мне помочь? Большое спасибо.