最近做项目,需要展示100楼数量的楼层,楼层中有语音、静态图片、动态图片和大量的文字其中的一样或多样同时出现以及图文混排等等,而且有些楼层还超级长,在需求上来看还需要设置显示字体的大小,更改主题模式等。看到这些需求,想到第一个方案是UITableView,但是如果Cell的高度超出屏幕可视范围很多倍的话,UITableView一次渲染花销的内存就会增大。第二个方案是使用UIWebView,UIWebView的渲染范围是根据它自身的frame大小决定的,这样遇上超长的楼层渲染所花销的内存就要比UITableView小很多了。
我一开始的想法是先根据共有特点设计每一层楼层的html本地文件和一个总的css:
<!--正文页body标签中的内容-->
<div class="top">
<!--标题部分-->
<div class="c1">
<div class="c1-title" id="title">title</div>
</div>
<!--楼主楼层-->
<div class="c2" id="louzhu_div">
<div>
<p>username</p>
</div>
<div class="c2-content" id="louzhu_content">louzhu_content</div>
</div>
<!--回复楼层-->
<div id="replys" style="text-align:center;">replys</div>
</div>
<!--底部提示-->
<div class="bottom" style="display:$bottom_tips_display$;">
<div class="bottom-text">
<p>page_num_count</p>
</div>
</div>
首先定义了标题和楼主楼层的html,因为帖子中标题是特别部分并且楼主楼层紧跟其后所以要单独拿出来设计。
louzhu_content是楼主发表的内容,内容中可能带有图片地址,视频地址,语音地址等等,这个就需要用到正则表达式等处理为你需要的html字符串格式,这里就不详细陈述了。
//替换连续换行为一个换行等
body=[body stringByReplacingOccurrencesOfRegex:@"(<br/>(\\s*<br/>)+)" withString:@"<br/>"];
body=[body stringByReplacingOccurrencesOfRegex:@"(\n(\\s*\n)+)" withString:@"\n"];
然后大概流程就完成了,加载速度也很快,下一章讨论展示后处理点击按钮,语音、图片批量下载等实现。