iOS视图没有足够积极地绘制(需要强制更改帧)

时间:2013-10-14 23:31:54

标签: ios objective-c uiview calayer

在我的应用程序中,我已经工作了大约6个月了,我在一些与绘制视图相关的地方看到了一个非常奇怪的错误。我已经构建了20多个ios应用程序,这是我见过这样的唯一项目。我必须说它让我挠头。

基本上,一些视图在帧更改之前不会绘制,或者对于我的桌面视图,直到我将其从屏幕上滚动。这些视图往往超出了他们的超级视图的范围,最终调整大小以显示它们(尽管并非总是如此)。调整超级视图的大小时,不会重绘子视图。

即使在笔尖中只有一个简单的UITextView,也会发生这种情况。但是,只要我滚动超级视图UIScrollView(导致重绘),文本视图就会显示出来。边界/框架是正确的,我检查了所有视图都没有被隐藏,他们的alpha是1.0

这是预期的行为吗?调用setNeedsDisplaysetNeedsLayout无效,因为这只是将视图标记为需要重绘。

我把这个绝对可怕的黑客放在一起强迫绘图,幸运的是我只需要在大约2个小地方使用它,但我真的很想知道发生了什么。

这可能有些过分,但我不能再浪费时间在我认为存在于UIViewCALayer中的错误。

//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];
}

有什么想法可能导致这种情况?

0 个答案:

没有答案