我在自定义表格单元格中有一个自定义 View 。每次更改自定义 View 上的特定属性时,我都会调用 [self setNeedsDisplay]
,它会在 - (void)drawRect:(CGRect)rect
中重新绘制 View 。该属性在 TableView 委托(delegate)的 tableView:cellForRowAtIndexPath:
中设置。但是,当表格 View 大于屏幕并且必须重用单元格时,每次 setNeedsDisplay
时都不会调用 drawRect
。尤其是当我快速弹 table 的时候。慢速滚动效果很好。这导致第一个和最后一个单元格中的信息通常不正确。
在日志中我可以看到,通常情况下,每次调用 setNeedsDisplay
都会调用 drawRect
,但是当我快速滚动表格 View 时,会有更多调用setNeedsDisplay
比 drawRect
更重要。当然这里应该有一个一比一的比例。
我在普通 UIView 中使用相同的自定义 View ,并且每次调用 setNeedsDisplay
时它都会完美重绘。该问题似乎与表格 View 和重用单元格无关。
有人知道这是怎么回事吗? 还有其他方法可以强制自定义 View 自行重绘吗?
最佳答案
我想我在这个问题上挣扎了将近一周才发现这个问题。就是这样,我没有骗你:
指向此自定义 View 的指针是在 .m 文件而不是 .h 文件中定义的,使其成为类变量而不是实例变量。
是的,我非常非常尴尬。
关于iphone - setNeedsDisplay并不总是调用drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/875110/