Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIView什么时候知道它有多大?_Ios_Swift_Uiview_Viewdidload_Viewdidlayoutsubviews - Fatal编程技术网

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

Ios UIView什么时候知道它有多大?,ios,swift,uiview,viewdidload,viewdidlayoutsubviews,Ios,Swift,Uiview,Viewdidload,Viewdidlayoutsubviews,我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望图形能够适应AutoLayout提供的UIView的任何大小。我给了它一个drawGraph()函数,该函数从.bounds.size中获取其当前大小,然后绘制一张合适的图片 我首先在容器UIViewController的viewDidLoad()中调用了我的绘图函数,但此时布局还没有发生,所以它在情节提要中有任何边界 我尝试从视图控制器的viewdilayoutsubviews()调用它,但这也不是完全令人满

我有一个UIView的子类,它使用CAShapeLayers将图片绘制到自身上。我希望图形能够适应AutoLayout提供的UIView的任何大小。我给了它一个
drawGraph()
函数,该函数从
.bounds.size
中获取其当前大小,然后绘制一张合适的图片

我首先在容器UIViewController的
viewDidLoad()
中调用了我的绘图函数,但此时布局还没有发生,所以它在情节提要中有任何边界

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


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

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

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


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

你在
viewwillbeen
方法中尝试过吗?