【问题标题】:Trying to force redraw of UITableViewCell试图强制重绘 UITableViewCell
【发布时间】:2011-02-11 22:04:01
【问题描述】:
我在 http://news.selectstartstudios.com/beveled-uitableviewcells/ 的斜角 UITableViewCells 上找到了这篇文章。我正在使用该技术来减小单元格的宽度,并且在大多数情况下效果很好。
但是,我有一个小问题。有时单元格未正确重绘。例如,即使一个单元格应该是“中间”单元格,它也被绘制为“顶部”单元格:yfrog.com/f1screenshot20100424at100
我该如何解决这个问题?
我尝试通过 [cell setNeedsDisplay]、[cell setNeedsLayout]、[tableView reloadRowAtIndexPath:withAnimation:]、[cell drawrect:] 和 [tableView drawRect:atIndexPath] 强制单元格重绘。我没有想法。
再次感谢!
【问题讨论】:
标签:
iphone
uiview
uitableview
redraw
【解决方案1】:
原来我需要在 cellForRowAtIndexpath 的末尾调用 [cell.backgroundView setNeedsDisplay]。
【解决方案2】:
遇到了同样的问题,因为我的一些cellForRowAtIndexpath 在后台线程中。这种情况下的解决方案是强制任何直接的单元格子视图更新到主线程中:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
if (cell.tag == indexPath.row){
// data retrieval that may block main thread and cause temp freeze...
dispatch_async(dispatch_get_main_queue(), ^{
// update any cell subviews here
}
}
});