在我的应用程序中,我已经工作了大约6个月了,我在一些与绘制视图相关的地方看到了一个非常奇怪的错误。我已经构建了20多个ios应用程序,这是我见过这样的唯一项目。我必须说它让我挠头。
基本上,一些视图在帧更改之前不会绘制,或者对于我的桌面视图,直到我将其从屏幕上滚动。这些视图往往超出了他们的超级视图的范围,最终调整大小以显示它们(尽管并非总是如此)。调整超级视图的大小时,不会重绘子视图。
即使在笔尖中只有一个简单的UITextView
,也会发生这种情况。但是,只要我滚动超级视图UIScrollView
(导致重绘),文本视图就会显示出来。边界/框架是正确的,我检查了所有视图都没有被隐藏,他们的alpha是1.0
这是预期的行为吗?调用setNeedsDisplay
和setNeedsLayout
无效,因为这只是将视图标记为需要重绘。
我把这个绝对可怕的黑客放在一起强迫绘图,幸运的是我只需要在大约2个小地方使用它,但我真的很想知道发生了什么。
这可能有些过分,但我不能再浪费时间在我认为存在于UIView
或CALayer
中的错误。
//Don't use this unless a view really really really really won't draw when it should
- (void)twForceDraw
{
CGAffineTransform transform = self.transform;
CGRect frame = self.frame;
CGRect bounds = self.bounds;
self.transform = CGAffineTransformIdentity;
self.frame = CGRectZero;
self.bounds = CGRectZero;
self.frame = frame;
self.bounds = bounds;
self.transform = transform;
[self setNeedsLayout];
[self setNeedsDisplay];
}
有什么想法可能导致这种情况?