具有动态高度的UIWebView会导致内存崩溃

时间:2015-02-23 12:09:34

标签: ios iphone ipad memory uiwebview

我的原始iOS屏幕里面有UITableView,显示了一些文章。此表中的某些单元格显示文章图像,标题,作者,评论等。但是内部有一个显示文章内容UIWebView的单个单元格。此单元格具有动态高度,具体取决于内容大小。文章内容从服务器作为JSON响应中的html字符串,可能包含支持HTML格式的图像,视频和其他内容。我可以根据某些要求使用正则表达式编辑此字符串(例如,根据应用程序设置增加字体大小)。这是一个代表我的UI结构的图像: enter image description here

问题是,一旦文章内容非常大,UITableView内部带有UIWebView的单元格的高度也会非常大,这会导致内存崩溃。在我的情况下,这种崩溃只发生在iPhone 6 Plus上。在所有其他设备上,包括iPhone(5,5S,6),iPad(2,3,4)(以及可能支持iOS 7的其他设备)应用程序正常工作。我怀疑其原因是iPhone 6 Plus具有高分辨率屏幕和仅1 Gb的内存。因此,使用与其他设备相同的内存量来呈现相同的内容,但分辨率更高,会导致内存崩溃。

我已经使用UI创建了两个测试应用程序,如下图所示:

enter image description here

两个应用都在一个UIWebView中加载相同的HTML内容。两个应用程序中都没有其他ui或逻辑。

如果a)全部正常工作,则会出现滚动指示器,仅显示可见内容。当我快速滚动时,我可以看到一段时间后用渲染内容替换的空白区域。

如果b)UIWebView拉伸以适合内容大小。测试应用程序崩溃(作为我真正的应用程序)。我怀疑在这种情况下甚至会呈现不可见的内容并导致内存崩溃。

所以我的问题是: 如何在不在UIWebView内滚动的情况下修复此错误?只有UITableView应该可滚动

2 个答案:

答案 0 :(得分:1)

让您的UITableViewCell可重用。 I-E (UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];)。 一件非常重要的事情是不要使用导致内存崩溃的[UIimage imagenamed:@"Imagename.jpg"],您可以使用[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Imagename" ofType:@"png"]];。 我希望它可能有所帮助。

答案 1 :(得分:0)

您可以为webview提供恒定高度。里面有滚动查看器。否则很难一次渲染大内容。如果你给webview恒定大小(最大值),也会删除空格。

编辑:webviews自己的scrollview应该可以正常使用tableviews scrollview我不确定