UIView 什么时候知道它有多大?
When does a UIView know how big it is?
我有一个 UIView 的子类,它使用 CAShapeLayers 在自身上绘制图片。我希望绘图适应 AutoLayout 给定的 UIView 的任何大小。我给了它一个 drawGraph()
函数,它从 .bounds.size
获取它的当前大小,然后绘制一张适合的图片。
我首先在容器 UIViewController 的 viewDidLoad()
中调用我的绘图函数,但此时布局尚未发生,因此它具有故事板中的任何边界。
我尝试从视图控制器的 viewDidLayoutSubviews()
调用它,但这也不完全令人满意。它被调用两次:第一次使用故事板中的边界,然后再次使用更新的(正确的)边界。中间有一个暂停,因此用户可以看到绘制和重绘。
如何判断 UIView 是否已应用其布局约束并准备好提供准确的尺寸?
你应该画在UIView
的drawRect(rect: CGRect)
中。一旦视图需要在屏幕上绘制,就会调用这个函数。
在我的 UIView 子类中,我通常通过覆盖 layoutSubview()
方法来完成与布局相关的代码。如果我没记错的话它比 drawRect(rect: CGRect)
.
更轻量级
但是,如果您真的只进行绘图,那么您可能应该在 drawRect(rect: CGRect)
中进行绘制,因为这就是 Xcode 在您创建新的 UIView 子类时的建议。
我有一个 UIView 的子类,它使用 CAShapeLayers 在自身上绘制图片。我希望绘图适应 AutoLayout 给定的 UIView 的任何大小。我给了它一个 drawGraph()
函数,它从 .bounds.size
获取它的当前大小,然后绘制一张适合的图片。
我首先在容器 UIViewController 的 viewDidLoad()
中调用我的绘图函数,但此时布局尚未发生,因此它具有故事板中的任何边界。
我尝试从视图控制器的 viewDidLayoutSubviews()
调用它,但这也不完全令人满意。它被调用两次:第一次使用故事板中的边界,然后再次使用更新的(正确的)边界。中间有一个暂停,因此用户可以看到绘制和重绘。
如何判断 UIView 是否已应用其布局约束并准备好提供准确的尺寸?
你应该画在UIView
的drawRect(rect: CGRect)
中。一旦视图需要在屏幕上绘制,就会调用这个函数。
在我的 UIView 子类中,我通常通过覆盖 layoutSubview()
方法来完成与布局相关的代码。如果我没记错的话它比 drawRect(rect: CGRect)
.
但是,如果您真的只进行绘图,那么您可能应该在 drawRect(rect: CGRect)
中进行绘制,因为这就是 Xcode 在您创建新的 UIView 子类时的建议。