2016-06-21 3 views
0

У меня есть UITableView с пользовательской ячейкой, содержащей UIWebView. Я пытаюсь перезагрузить ячейку с правильной высотой после того, как веб-просмотр завершит загрузку содержимого html.UITableView reloadRowsAtIndexPaths постоянно перезагружает ячейку

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    height = tableView.frame.size.height - tableView.contentSize.height 
    return height 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell! 
    cell = tableView.dequeueReusableCellWithIdentifier("bodyFieldCellIdentifier", forIndexPath: indexPath) 
    (cell as! SMBodyTableViewCell).frame = CGRect(x: 0, y: 0, width: width, height: height) 
    (cell as! SMBodyTableViewCell).bodyWebView.delegate = self 
    (cell as! SMBodyTableViewCell).bodyWebView.loadHTMLString(self.messageBody, baseURL: nil) 
    (cell as! SMBodyTableViewCell).bodyWebView.tag = indexPath.row 
} 

В методе делегата webViewDidFinishLoad я пытаюсь перезагрузить ячейку, содержащую веб-просмотр.

func webViewDidFinishLoad(aWebView: UIWebView) { 
    let indexPath = NSIndexPath(forRow: aWebView.tag, inSection: 0) 
    self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 
} 

При запуске приложения ячейка, содержащая веб-просмотр, постоянно перезагружается. Высота кажется правильной и по желанию, но вы можете видеть перезагрузку ячеек без остановок. Я не могу понять, почему он постоянно перезагружается. Содержимое HTML, которое я загружаю, является простым HTML и не имеет нескольких/бесконечных фреймов, поэтому webViewDidFinishLoad постоянно вызывается. Я также попытался пересчитать и установить высоту ячейки в webViewDidLoad, но высота, похоже, не рассчитана правильно.

ответ

0

когда webViewDidFinishLoad вы можете получить высоту webview.scrollView.contentSize.height, а затем вызвать reloadRowsAtIndexPaths

0

Ну, конечно, это перезагружает постоянно. Это то, что вы написали.

Каждый раз, когда вы загружаете ячейку, вы запускаете веб-представление внутри ячейки для загрузки. Когда загрузка завершена, она вызывает webViewDidFinishLoad, где вы запускаете перезагрузку той же самой ячейки. Затем он вызывает cellForRowAtIndexPath, который запускает веб-представление для загрузки AGAIN. И так далее.

Вам не нужно звонить в reloadRowsAtIndexPaths в webViewDidFinishLoad. Веб-просмотр должен автоматически обновлять его содержимое, если вы ничего не делаете.

Смежные вопросы