如何检查视图而不是 viewController 是否可见?

How to check if view, not viewController, is visible or not?

有没有办法检查视图(视图控制器的子视图)现在是否可见?

我检查了link 1, link 2 and link 3。所有这些 post 都讨论了 UIViewController 的视图,并根据视图的 window 属性 编写了条件。 但是我想检查一个视图现在是否可见或被其他视图覆盖或隐藏,我无法在以下条件下执行此操作。

if (viewController.isViewLoaded && viewController.view.window) {
  // viewController is visible
}

关于我如何做到这一点的任何帮助?谢谢。

您可以使用此代码获取视图的索引并确定它是否在前面

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
NSLog(@"%d", [[self.view subviews] indexOfObject:view1]); // Is 1

一个 UIView 有一个 superview 属性 和一个 window 属性。您可以查看它们是否为 nil。如果视图有一个 nil superview,那么它还没有被添加到任何东西并且是不可见的。

如果视图确实有一个父视图 属性 而不是 nil 那么你可以查看父视图的 subviews 数组 属性 来确定堆栈视图(0 在后面)。

如果您的视图不在堆栈的前面,您需要查看它前面的其他视图的框架矩形以确定它们是否覆盖了它。就个人而言,我会使用 CGRectIntersection 命令来测试。

UIView 还有一个 hidden 属性,您可以检查它,还有一个 alpha 属性,如果将其设置为 0,它会使视图不可见.