ios - UITableViewCell 在出队时重绘
<p><p><strong>我的设置</strong></p>
<p>我有一个 <code>UITableViewCell</code>,它位于我的主 Storyboard 的 <code>UITableViewController</code> 中。它填充了一些从 REST API 中提取的 JSON 数据,这将导致每个单元格的高度可变。有 <code>UIImageViews</code>、<code>UILabels</code> 所有不同的高度和样式,想想 Instagram 风格。</p>
<p><strong>我的问题</strong></p>
<p>当我滚动到第 5 或第 6 个单元格,然后返回时,它们开始重绘和重叠,因此文本会混合,线条会重绘,等等。</p>
<p><strong>我的尝试</strong></p>
<p>这似乎是 SO 上的一个常见问题,所以我尝试了几个已发布的解决方案。似乎我的问题可能与其他人面临的问题相同,也就是说,每次出队时我都会在我的单元格上调用 <code>addSubview</code> ,但我尝试检查该单元格是否已经存在。我在某个地方遇到了另一个帖子(对不起,我不记得在哪里),这表明因为我在 Storyboard 中创建了它,所以它已经初始化并且 <code>if ( !cell )</code> 已经返回 false ,所以我不知道如何防止它重绘。 </p>
<p>当我尝试从 Storyboard 中删除单元格并以编程方式创建它时,我收到一条错误消息,提示它找不到具有我的标识符 <code>@"Cell"</code> 的单元格。</p>
<p>我也尝试过有人在出队时删除所有 subview 的解决方案,所以我使用了:</p>
<pre><code>for ( UIView *view in cell.contentView.subviews ) {
if (]) {
;
}
}
</code></pre>
<p>它什么也没找到。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>@rdelmar 的评论是正确的。你不应该做你正在做的事。可能有效,但这是一种糟糕的形式,你不想养成坏习惯。</p>
<p>首先,利用面向对象的编程。单元格应该能够根据您要求它显示的数据进行 self 配置。表格 View 不应该设计单元格。</p>
<p>UITableViewCells 需要针对速度进行优化。创建和添加 subview 是一个缓慢的过程。一次就可以了,但是单元格将被重用(系统优化),您应该只重用第一次创建单元格时添加的现有 View 。</p>
<p>例如,您可以隐藏不需要的 subview 。您可能希望在 -prepareForReuse 中执行此操作。您可以在 -layoutSubviews 中移动它们。或者在-updateConstraints中改变 subview 的位置。</p>
<p>通常您只想将要显示的数据从数据源(通常是 ViewController )传递给表格 View 单元子类。让单元格完成显示工作。</p></p>
<p style="font-size: 20px;">关于ios - UITableViewCell 在出队时重绘,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/30067353/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/30067353/
</a>
</p>
页:
[1]