首页 > 解决方案 > 在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图?

问题描述

我想监控 UIViewController 开始运行 init 方法和用户真正看到屏幕上显示的内容之间需要多长时间。我知道 viewDidAppear 是结束计时器的好地方,但在某些情况下,我的应用程序需要从 Web 获取数据,然后在下载完成后呈现 UITableViewCells 或其他视图。我想知道是否有任何通用方法来处理所有案件。

标签: iosuiviewcontrollerapm

解决方案


一个好地方是viewDidLayoutSubviews。根据苹果文档,viewDidLayoutSubviews调用它来通知视图控制器它的视图刚刚布置了它的子视图,因此每次更新视图(旋转、更改等)时都会调用此方法。这种方法的缺点是它被称为 A LOT,对于每次布局更改,您可能应该在那里进行一些额外的计算(您是否收到了来自服务器的响应,您的数据源是否已更新)。这回答了您的具体问题 - “在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图? ” - 但我不建议这样做。

可能您想为您正在使用的 API 实现一些分析日志记录,所以在我看来,最好的方法是拥有一个实现两种方法(加载开始 - 加载完成)的日志记录类。并在您的 ViewControllers 中调用这些方法。(也许您可以创建一个基础 ViewController 类,并且您的所有视图控制器都应该继承该 ViewController - 在该基础 ViewController 中,您只能在 viewDidLoad 中调用加载启动方法一次 - 因为您覆盖了该 viewDidLoad - 这将为您节省几行代码忘记在您的 VC 中调用该方法的风险)。

在布局 UI 时,操作系统通常足够快(除非你对 UI 做了一些非常奇怪的事情),所以唯一减慢加载速度的是 WebAPI 调用,所以你不应该介意布局方法。请让我知道这是否有意义。


推荐阅读