在我已经开发了大约 6 个月的应用程序中,我在一些与视图绘制相关的地方看到了一个非常奇怪的错误。我已经构建了 20 多个 ios 应用程序,这是我见过的唯一一个项目。我必须说这让我摸不着头脑。
基本上,在框架更改之前,或者对于我拥有的 tableview,直到我将其滚动到屏幕之外,才会绘制几个视图。这些视图往往超出其超级视图的范围,最终调整大小以显示它们(尽管并非总是如此)。当父视图调整大小时,子视图不会重绘。
即使只有一个简单UITextView
的笔尖也会发生这种情况。但是,一旦我滚动超级视图UIScrollView
(导致重绘),文本视图就会显示出来。边界/框架是正确的,我检查了所有视图都没有隐藏,它们的 alpha 为 1.0
这是预期的行为吗?调用setNeedsDisplay
并setNeedsLayout
什么也不做,因为这只是将视图标记为需要重绘。
我拼凑了这个绝对可怕的黑客来强制绘图,幸运的是我只需要在大约 2 个小地方使用它,但我真的很想知道发生了什么。
这可能是矫枉过正,但我不能再浪费时间在我认为存在于UIView
or中的错误上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];
}
有什么想法可能导致这种情况吗?