首页 > 解决方案 > UIView(不是 UIViewController)是否有任何 viewDidAppear 方法?

问题描述

我需要了解 UIView 何时出现在屏幕上,因此我需要 viewDidAppear 方法的类似物。

我找到了一个 UIView 生命周期:

  1. willMoveToSuperview
  2. 无效内在内容大小
  3. didMoveToSuperview
  4. 从笔尖醒来
  5. willMoveToWindow
  6. 需要更新约束
  7. didMoveToWindow
  8. 设置需求布局
  9. 更新约束
  10. 布局子视图
  11. 绘制矩形

我尝试了所有这些方法,但我没有得到答案。

标签: iosuiviewuiviewcontrollerviewdidloadviewdidappear

解决方案


不,没有viewDidAppearUIView您可以覆盖 func以对继承的 ViewdrawRect进行任何所需的 UI 更改。UIView

旁注- 如果您想drawrect稍后更新,请致电setNeedsDisplaysetNeedsDisplay不会立即调用drawRect,而是将接收者的整个边界矩形标记为需要重绘。

换句话说 - 你永远不应该自己调用 drawRect 。相反,您告诉系统需要使用 setNeedsDisplay 方法进行绘制,该方法将视图标记为脏。然后在下一个更新周期调用子类的 drawRect 方法。

根据来自 OP(@Alexander) 的查询,他只需要设置一些变量,因此建议使用以下任何覆盖函数,具体取决于需要执行的操作

  • -(void)didMoveToSuperview- 在视图插入视图层次结构后立即发送。

  • -(void)didMoveToWindow- 在视图设置其窗口属性后立即发送。

  • -(void)willMoveToSuperview:(UIView *)newSuperview- 在视图作为子视图添加到另一个视图之前立即发送; newSuperview当您从其超级视图中删除视图时,可能为零。

  • -(void)willMoveToWindow:(UIWindow *)newWindow- 在视图(或其父视图)添加到窗口之前立即发送;newWindow 当您从窗口中移除视图时,可能为 nil。


推荐阅读