iphone - setNeedsDisplay并不总是调用drawRect

标签 iphone cocoa-touch

我在自定义表格单元格中有一个自定义 View 。每次更改自定义 View 上的特定属性时,我都会调用 [self setNeedsDisplay] ,它会在 - (void)drawRect:(CGRect)rect 中重新绘制 View 。该属性在 TableView 委托(delegate)的 tableView:cellForRowAtIndexPath: 中设置。但是,当表格 View 大于屏幕并且必须重用单元格时,每次 setNeedsDisplay 时都不会调用 drawRect 。尤其是当我快速弹 table 的时候。慢速滚动效果很好。这导致第一个和最后一个单元格中的信息通常不正确。

在日志中我可以看到,通常情况下,每次调用 setNeedsDisplay 都会调用 drawRect,但是当我快速滚动表格 View 时,会有更多调用setNeedsDisplaydrawRect 更重要。当然这里应该有一个一比一的比例。

我在普通 UIView 中使用相同的自定义 View ,并且每次调用 setNeedsDisplay 时它都会完美重绘。该问题似乎与表格 View 和重用单元格无关。

有人知道这是怎么回事吗? 还有其他方法可以强制自定义 View 自行重绘吗?

最佳答案

我想我在这个问题上挣扎了将近一周才发现这个问题。就是这样,我没有骗你:

指向此自定义 View 的指针是在 .m 文件而不是 .h 文件中定义的,使其成为类变量而不是实例变量。

是的,我非常非常尴尬。

关于iphone - setNeedsDisplay并不总是调用drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/875110/

相关文章:

cocoa - 停止 enumerateAttribute :inRange:options:usingBlock: from calling my block with nil values

iphone - 文本转语音应用程序大小

iphone - self 对象是如何以及在哪里分配的?

ios - 如何更改 Popover View 的大小

iphone - 捕获来自外部(蓝牙)键盘的所有输入

iphone - MPMediaItem 到 AVAsset 到 .MP3

ios - 带有 systemFontOfSize 的新 San Francisco 文本字体

iphone - 从子 UIViewController 到父 UIViewController 的通信

ios - 如何在 uicollectionview header 中添加 uicollectionview

ios - 自定义 UIStoryboardSegue 中的 View 之间不显示过渡