UIView什么时候知道它有多大?

时间:2016-08-08 06:29:06

标签: ios swift uiview viewdidload viewdidlayoutsubviews

我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望绘图能够适应AutoLayout给出的UIView的大小。我给它一个drawGraph()函数,从.bounds.size获取当前大小,然后绘制图片以适应。

我首先在容器UIViewController的viewDidLoad()中调用我的绘图函数,但此时布局尚未发生,因此它具有故事板中的任何界限。

我尝试从视图控制器的viewDidLayoutSubviews()调用它,但这也不完全令人满意。它被调用两次:首先使用故事板的边界,然后再使用更新的(正确的)边界。中间有一个暂停,因此用户可以看到绘图和重绘。

如何判断UIView是否已应用其布局约束并准备好为我提供准确的尺寸?

2 个答案:

答案 0 :(得分:1)

您应该在UIView drawRect(rect: CGRect)中绘制它。一旦视图需要在屏幕上绘制,将调用此函数。

答案 1 :(得分:1)

在我的UIView子类中,我通常通过覆盖layoutSubview()方法来执行与布局相关的代码。如果我没记错的话,它比drawRect(rect: CGRect)更轻量级。

但是如果你真的只是绘图那么你应该在drawRect(rect: CGRect)中进行,因为这是Xcode在你创建一个新的UIView子类时建议的。