2015-02-23 15 views
6

Ich habe einen nativen iOS-Bildschirm mit UITableView innerhalb, die Artikel anzeigt. Einige Zellen in dieser Tabelle zeigen Artikelbild, Titel, Autor, Kommentare usw. an. Es gibt jedoch eine einzelne Zelle mit UIWebView darin, die Artikelinhalt anzeigt. Diese Zelle hat abhängig von der Inhaltsgröße eine dynamische Höhe. Der Artikelinhalt wird vom Server als HTML-Zeichenfolge in der JSON-Antwort verwendet und kann Bilder, Videos und andere Dinge enthalten, die das HTML-Format unterstützen. Ich kann diese Zeichenfolge in Abhängigkeit von bestimmten Anforderungen mit regulären Ausdrücken bearbeiten (z. B. die Schriftgröße abhängig von den App-Einstellungen erhöhen). Hier ist ein Bild meiner UI Struktur darstellt: enter image description hereUIWebView mit dynamischer Höhe führt zu Speicherabsturz

Das Problem ist, dass, sobald der Inhalt des Artikels ist sehr groß, UITableView Zelle mit UIWebView innen auch in der Höhe sehr groß wird, und dies führt zu Speicher zum Absturz bringen. In meinem Fall passiert dieser Absturz nur auf dem iPhone 6 Plus. Auf allen anderen Geräten einschließlich iPhone (5, 5S, 6), iPad (2, 3, 4) (und wahrscheinlich anderen Geräten, die iOS 7 unterstützt) App funktioniert ordnungsgemäß. Wie ich vermute, ist der Grund dafür, dass iPhone 6 Plus einen hochauflösenden Bildschirm und nur 1 GB Speicher hat. Wenn also der gleiche Inhalt mit der gleichen Speicherkapazität wie bei anderen Geräten gerendert wird, jedoch in größerer Auflösung, führt dies zu einem Speicherabsturz.

Ich habe zwei erstellt Testanwendungen mit UI wie im Bild unten:

enter image description here

Beiden Anwendungen laden den gleichen HTML-Inhalt in einer einzigen UIWebView. In beiden Apps gibt es keine andere Logik oder Logik.

Wenn a) alles korrekt funktioniert, erscheint der Scroll-Indikator und nur der sichtbare Inhalt wird gerendert. Wenn ich schnell scrolle, sehe ich Leerraum, der nach einem Moment durch gerenderten Inhalt ersetzt wird.

In Fall b) UIWebView erstreckt sich, um Inhaltsgröße zu passen. Test-App stürzt ab (wie meine echte App). Wie ich vermute, werden in diesem Fall sogar unsichtbare Inhalte gerendert und das führt zu einem Speicherabsturz.

Also meine Frage ist: Wie kann ich diesen Fehler beheben, ohne innerhalb UIWebView zu Scrollen? Nur UITableView sollte scrollbar sein

+0

Sie jemals herausfinden? Ich stoße auf dasselbe Problem. –

+0

Ich bin auch mit diesem Problem konfrontiert. Hast du es gelöst? Vielen Dank. –

+0

Ich habe dieses Problem gelöst, indem ich die maximale Höhe für die Web-View-Zelle eingeschränkt habe. Wenn die Zellenhöhe der Webansicht mehr als eine bestimmte Anzahl von Pixeln beträgt, zeige ich statt der Erhöhung der Höhe die Schaltfläche "Mehr anzeigen ..." an. Wenn der Benutzer auf diese Schaltfläche klickt, wird UIWebView im Vollbildmodus ohne zusätzliche UI-Elemente angezeigt und der Benutzer kann nur UIWebView-Inhalte scrollen. Ich mag diese Lösung nicht, aber das ist die einzige Lösung, die ich gefunden habe. In meinem Fall wurde dies von Kunden genehmigt. –

Antwort

0

Machen Sie Ihre UITableViewCell wiederverwendbar. i-e (UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];). eine Sache sehr wichtig, verwenden Sie nicht [UIimage imagenamed:@"Imagename.jpg"], die Sie zu einem Speicherabsturz führt, können Sie [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Imagename" ofType:@"png"]]; verwenden. Ich hoffe, es könnte helfen.

+0

Leider funktioniert das nicht. Meine 'UITableViewCell's sind bereits wiederverwendbar. Meine Test-App stürzt auch ab. Es hat keine 'UIImage's und' UITableView'. Nur einzelne 'UIWebView' –

+0

Und was ist mit Bildladen? –

+0

Bearbeitete meinen vorherigen Kommentar mit der Antwort über Bilder –

0

Sie können webview konstante Höhe geben. Es hat Scrollviewer im Inneren. Ansonsten ist es wirklich schwierig, große Inhalte auf einmal zu rendern. Wenn Sie eine konstante Größe von webview angeben (max. Wert), werden Leerzeichen ebenfalls entfernt.

bearbeiten: webviews eigene scrollview sollte gut mit tabletviews scrollview bu ich bin nicht sicher

+0

Ich habe das schon versucht. In diesem Fall scrollte 'UIWebView' separat von 'UITableView'. Ich brauche eine einzelne Bildlauf für diesen Bildschirm, nicht Bildlauf innerhalb einer anderen Bildlaufansicht –

+1

Ich habe nicht mein Mac in der Nähe von. kannst du WKWebView für iphone 6+ versuchen. es unterstützt nur ios8 +, aber iphone6 ​​ist auch nur für ios8 + verfügbar. kann vielleicht bessere Leistung geben. – kocakmstf

+0

Ich habe gerade so versucht, aber leider Ergebnis ist das gleiche - App stürzt mit sehr großen HTML-Inhalt –

Verwandte Themen