2016-06-21 21 views
0

Ich habe eine UITableView mit einer benutzerdefinierten Zelle, die ein UIWebView enthält. Ich versuche, die Zelle mit der richtigen Höhe neu zu laden, sobald die Webansicht den HTML-Inhalt geladen hat.UITableView reloadRowsAtIndexPaths lädt die Zelle kontinuierlich

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 
} 

In der Delegate-Methode webViewDidFinishLoad versuche ich die Zelle mit dem Webview neu zu laden.

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

Wenn ich die App ausführen, wird die Zelle mit dem Webview kontinuierlich neu geladen. Die Höhe scheint korrekt und wie gewünscht zu sein, aber Sie können sehen, dass die Zelle non-stop nachlädt. Ich kann nicht herausfinden, warum es ständig neu lädt. Der HTML-Inhalt, den ich lade, ist einfacher HTML und hat keine Mehrfach-/Endlos-Rahmen, so dass webViewDidFinishLoad kontinuierlich aufgerufen wird. Ich habe auch versucht, die Höhe der Zelle in webViewDidLoad neu zu berechnen und zu berechnen, aber die Höhe scheint nicht korrekt berechnet zu werden.

Antwort

0

wenn webViewDidFinishLoad Sie Höhe von webview.scrollView.contentSize.height bekommen kann, dann reloadRowsAtIndexPaths nennen

0

Nun natürlich neu lädt es ständig. Dafür hast du es geschrieben.

Jedes Mal, wenn Sie eine Zelle laden, lösen Sie die Webansicht innerhalb der zu ladenden Zelle aus. Wenn der Ladevorgang abgeschlossen ist, ruft er webViewDidFinishLoad auf, wo Sie das erneute Laden dieser Zelle auslösen. Dann ruft es cellForRowAtIndexPath auf, wodurch die Webansicht erneut geladen wird. Und weiter und weiter.

Sie sollten den Anruf zu reloadRowsAtIndexPaths in Ihrem webViewDidFinishLoad nicht benötigen. Die Webansicht sollte den Inhalt automatisch aktualisieren, ohne dass Sie etwas tun müssen.

Verwandte Themen