【发布时间】:2015-04-24 18:14:43
【问题描述】:
我有一个带有 UITableView 的原生 iOS 屏幕,其中显示了一些文章。此表中的某些单元格显示文章图像、标题、作者、cmets 等。但有一个单元格内部带有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 内容。两个应用程序中都没有其他用户界面或逻辑。
如果 a) 一切正常,滚动指示器出现并且只呈现可见内容。当我快速滚动时,我可以看到稍后会被渲染内容替换的空白。
如果 b) UIWebView 拉伸以适应内容大小。测试应用程序崩溃(作为我的真实应用程序)。正如我所怀疑的那样,在这种情况下,甚至会呈现不可见的内容,这会导致内存崩溃。
所以我的问题是:
如何在不滚动 UIWebView 的情况下修复此错误?只有UITableView 应该是可滚动的
【问题讨论】:
-
你有想过这个吗?我遇到了同样的问题。
-
我也面临这个问题。你解决了吗?谢谢。
-
我通过限制网络视图单元格的最大高度解决了这个问题。如果 web 视图单元格高度超过一定数量的像素,我不会增加其高度,而是显示“显示更多...”按钮。当用户点击此按钮时,将呈现全屏 UIWebView,而无需额外的 UI 元素,并且用户只能滚动 UIWebView 内容。我不喜欢这个解决方案,但这是我找到的唯一解决方案。就我而言,这已得到客户的认可。
标签: ios iphone ipad memory uiwebview