【问题标题】:When does a UIView know how big it is?UIView 什么时候知道它有多大?
【发布时间】:2016-12-13 20:02:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你在viewWillAppear方法中试过了吗?

标签: ios swift uiview viewdidload viewdidlayoutsubviews


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多