我的原始iOS屏幕里面有UITableView
,显示了一些文章。此表中的某些单元格显示文章图像,标题,作者,评论等。但是内部有一个显示文章内容UIWebView
的单个单元格。此单元格具有动态高度,具体取决于内容大小。文章内容从服务器作为JSON响应中的html字符串,可能包含支持HTML格式的图像,视频和其他内容。我可以根据某些要求使用正则表达式编辑此字符串(例如,根据应用程序设置增加字体大小)。这是一个代表我的UI结构的图像:
问题是,一旦文章内容非常大,UITableView
内部带有UIWebView
的单元格的高度也会非常大,这会导致内存崩溃。在我的情况下,这种崩溃只发生在iPhone 6 Plus上。在所有其他设备上,包括iPhone(5,5S,6),iPad(2,3,4)(以及可能支持iOS 7的其他设备)应用程序正常工作。我怀疑其原因是iPhone 6 Plus具有高分辨率屏幕和仅1 Gb的内存。因此,使用与其他设备相同的内存量来呈现相同的内容,但分辨率更高,会导致内存崩溃。
我已经使用UI创建了两个测试应用程序,如下图所示:
两个应用都在一个UIWebView
中加载相同的HTML内容。两个应用程序中都没有其他ui或逻辑。
如果a)全部正常工作,则会出现滚动指示器,仅显示可见内容。当我快速滚动时,我可以看到一段时间后用渲染内容替换的空白区域。
如果b)UIWebView
拉伸以适合内容大小。测试应用程序崩溃(作为我真正的应用程序)。我怀疑在这种情况下甚至会呈现不可见的内容并导致内存崩溃。
所以我的问题是:
如何在不在UIWebView
内滚动的情况下修复此错误?只有UITableView
应该可滚动
答案 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我不确定