2015-02-23 40 views
6

İçinde UITableView ile yerel bir iOS ekranı var, bu da bazı makaleleri görüntüler. Bu tablodaki bazı hücreler makale görüntüsünü, başlığı, yazarı, yorumları vb. Görüntüler. Ancak, makale içeriğini görüntüleyen içinde UIWebView bulunan tek bir hücre var. Bu hücre, içerik boyutuna bağlı olarak dinamik yüksekliğe sahiptir. Makale içeriği, sunucudan JSON yanıtında html dizesi olarak gider ve HTML biçimini destekleyen resimler, videolar ve diğer şeyler içerebilir. Bu dizeyi, bazı gereksinimlere bağlı olarak düzenli ifadeler kullanarak düzenleyebilirim (örneğin, uygulama ayarlarına bağlı olarak yazı tipi boyutunu artır). enter image description hereDinamik yüksekliği olan UIWebView, bellek çökmesine neden oluyor

sorun Makalenin içeriği çok büyük bir defa, UIWebView ile UITableView hücre içi de yüksekliği çok büyük olur ve bu bellek çökmesine yol açıyor olmasıdır: İşte benim UI yapısını temsil eden bir görüntüdür. Benim durumumda bu çarpışma sadece iPhone 6 Plus'ta gerçekleşir. IPhone (5, 5S, 6), iPad (2, 3, 4) (ve muhtemelen iOS 7'yi destekleyen diğer cihazlar) dahil olmak üzere diğer tüm cihazlarda doğru şekilde çalışıyor. Sebep olarak, iPhone 6 Plus'ın yüksek çözünürlüklü ekrana ve yalnızca 1 Gb belleğine sahip olduğundan şüpheleniyorum. Bu nedenle, aynı içeriği diğer cihazlarda olduğu gibi aynı miktarda bellekle birlikte, ancak daha büyük çözünürlükte bellek çökmesine yol açar.

Ben aşağıdaki resimde olduğu gibi UI ile iki deney uygulamaları oluşturduk:

enter image description here

Hem uygulamalar tek UIWebView yılında aynı HTML içeriği yükler. Her iki uygulamada başka bir ui veya mantık yoktur.

a) tüm çalışmaların doğru olması durumunda, kaydırma göstergesi belirir ve yalnızca görünür içerik görüntülenir. Hızlı kaydırırken, bir andan sonra işlenen içerikle değiştirilen beyaz alanı görebilirim. B) UIWebView, içerik boyutuna uyacak şekilde genişletilir. Test uygulaması çöküyor (gerçek uygulamam gibi). Bu durumda şüpheli olduğum gibi, görünmeyen içerik bile oluşuyor ve bu da bellek çökmesine yol açıyor.

Yani benim soru: nasıl UIWebView içine kaydırma yapmadan bu hatayı düzeltebilirim? Yalnızca UITableView kaydırılabilir olmalıdır

+0

Bunu hiç anladın mı? Aynı konuya koşuyorum. –

+0

Ayrıca bu sorunla karşı karşıyayım. Çözdün mü? Teşekkürler. –

+0

Bu sorunu, web görüntüleme hücresi için maksimum yüksekliği kısıtlayarak çözdüm. Web görüntüleme hücresi yüksekliği, belirli bir piksel miktarından daha fazlaysa, yüksekliğini artırmak yerine "Daha fazla göster ..." düğmesini gösterir. Kullanıcı bu düğmeye dokunduğunda, tam ekran UIWebView ek UI öğeleri olmadan sunulur ve kullanıcı yalnızca UIWebView içeriğini kaydırabilir. Bu çözümü sevmiyorum ama bulduğum tek çözüm bu. Benim durumumda bu müşteriler tarafından onaylandı. –

cevap

0

UITableViewCell'inizi yeniden kullanılabilir hale getirin. i-e (UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];). Bir şey çok önemli birkullanmayın bir bellek kazasında sizi yönlendirir, [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Imagename" ofType:@"png"]]; kullanabilirsiniz. Umarım yardımcı olabilir.

+0

Ne yazık ki bu işe yaramıyor. Benim UITableViewCell'im zaten yeniden kullanılabilir. Test uygulamam da çöker. Herhangi bir UIImage ve UITableView' içermiyor. Sadece tek "UIWebView" –

+0

Ve görüntü yükleme hakkında ne? –

+0

Önceki yorumumu görüntülerle ilgili olarak yanıtladı –

0

Webview sabit yüksekliğini sağlayabilirsiniz. içinde scrollviewer var. aksi halde büyük içeriği bir kerede oluşturmak gerçekten çok zordur. webview sabit boyutunu verirseniz (maksimum değer) beyaz alanlar da kaldırılacaktır.

düzenleme: webviews kendi scrollview tableviews ile çalışmalıdır scrollview bu emin değilim

+0

Zaten bunu denedim. Bu durumda 'UIWebView'' UITableView' içerisinden ayrı olarak kaydırılır. Bu ekran için tek bir kaydırmaya ihtiyacım var, başka bir kaydırma görünümünde görünümü kaydırmamaya dikkat et –

+1

Mac'im yakınımda yok. iphone 6+ için WKWebView'ı deneyebilir misin? Sadece ios8 + destekler ancak iphone6 ​​sadece ios8 + için kullanılabilir. belki daha iyi performans verebilir. – kocakmstf

+0

Ben sadece böyle bir yaklaşım denedim, ama ne yazık ki aynı sonuç - uygulama çok büyük html içeriği –

İlgili konular