ios - 在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图?
问题描述
我想监控 UIViewController 开始运行 init 方法和用户真正看到屏幕上显示的内容之间需要多长时间。我知道 viewDidAppear 是结束计时器的好地方,但在某些情况下,我的应用程序需要从 Web 获取数据,然后在下载完成后呈现 UITableViewCells 或其他视图。我想知道是否有任何通用方法来处理所有案件。
解决方案
一个好地方是viewDidLayoutSubviews
。根据苹果文档,viewDidLayoutSubviews
调用它来通知视图控制器它的视图刚刚布置了它的子视图,因此每次更新视图(旋转、更改等)时都会调用此方法。这种方法的缺点是它被称为 A LOT,对于每次布局更改,您可能应该在那里进行一些额外的计算(您是否收到了来自服务器的响应,您的数据源是否已更新)。这回答了您的具体问题 - “在 iOS 中,有没有办法找出屏幕上是否呈现了任何视图? ” - 但我不建议这样做。
可能您想为您正在使用的 API 实现一些分析日志记录,所以在我看来,最好的方法是拥有一个实现两种方法(加载开始 - 加载完成)的日志记录类。并在您的 ViewControllers 中调用这些方法。(也许您可以创建一个基础 ViewController 类,并且您的所有视图控制器都应该继承该 ViewController - 在该基础 ViewController 中,您只能在 viewDidLoad 中调用加载启动方法一次 - 因为您覆盖了该 viewDidLoad - 这将为您节省几行代码忘记在您的 VC 中调用该方法的风险)。
在布局 UI 时,操作系统通常足够快(除非你对 UI 做了一些非常奇怪的事情),所以唯一减慢加载速度的是 WebAPI 调用,所以你不应该介意布局方法。请让我知道这是否有意义。
推荐阅读
- python-3.x - 根据django中选择字段中的数据创建一个字段
- python - 如何在 tensorflow keras 模型调用方法中拆分输入列表?
- javascript - ajax 找不到脚本函数
- python - 如何为 tkinter 文本框创建“自我调整”书签
- yii - "andFilterWhere" 与 "joinWith()" 一起工作,但在 yii2 中不能与 "with()" 一起工作
- c++ - 已解决 - LookupAccountName 总是失败并出现错误 122 (ERROR_INSUFFICIENT_BUFFER)
- java - 在几次尝试处理失败后,在 reactor-kafka 中向 Kafka 提交偏移量
- mongodb - mongo查找“精确嵌入文档匹配”的语法是否与“隐式和”有歧义?
- reactjs - TypeScript 如何从另一个组件触发组件中的操作
- c++ - 如何初始化作为结构指针的类成员