在viewDidLoad()中获取视图的渲染范围

问题描述 投票:0回答:1

我整天都在寻求帮助,但找不到答案。

我有一个子视图,其中正在绘制一个矩形,该矩形由该子视图框起来,因此我需要知道通过自动布局调整后的子视图的大小才能正确地对其进行构图。我找不到从ViewDidLoad()执行此操作的方法,因此矩形在启动时正确呈现。我尝试了以下方法:

  1. 在我在dayView.setNeedsLayout()中绘制矩形之前先使用dayView.layoutIfNeeded(),然后使用viewDidLoad(),但是检查这些语句的任何一侧都表明dayView.bounds保持不变。
  2. viewDidLayoutSubviews()绘制视图,这是可行的,但是导致我的矩形被绘制了5次,因为对每个被重画的子视图(我有5个)调用了viewDidLayoutSubviews(),因此该矩形被绘制了在第4个呼叫中,第5个呼叫)-这似乎浪费资源,肯定有更好的方法吗?
  3. ViewDidLoad()中两次绘制视图,希望第一次强制绘制将导致视图调整大小,因此第二次绘制将在第一次绘制后可以使用新的边界(我知道这是绝望的,但是它仍然没有工作)。

我希望有人可以提供帮助。

swift autolayout
1个回答
0
投票

转到viewDidLoad中的主线程并执行操作将解决您的问题

         DispatchQueue.main.async { 
                // here you can add anything it will have proper frame
            }
© www.soinside.com 2019 - 2024. All rights reserved.