【问题标题】:Remove all the subviews from a UIScrollView?从 UIScrollView 中删除所有子视图?
【发布时间】:2011-05-05 09:07:34
【问题描述】:

如何从 UIScrollview 中删除所有子视图?

【问题讨论】:

  • Swift 版本是here

标签: objective-c iphone uiscrollview subviews


【解决方案1】:

从以前的答案补充 Swift 简洁版本(Swift 3.0 就绪):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }

【讨论】:

    【解决方案2】:

    scrollView 成为UIScrollView 的一个实例。

    在 Objective-C 中,这很容易。只需拨打makeObjectsPerformSelector:,如下所示:

    目标-C:

    [scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    

    在 Swift 中,您无法获得运行时访问权限,因此您必须自己实际处理迭代。

    斯威夫特:

    简洁版,from here:

    scrollview.subviews.map { $0.removeFromSuperview() }
    

    一种更具描述性的方法(来自here)假设scrollview.subviews

    let subviews = self.scrollView.subviews
    for subview in subviews{
        subview.removeFromSuperview()
    }
    

    【讨论】:

    • 如果滚动指示器设置为显示,这将删除它们,但 OP 并不关心它们,如下面的 cmets 所述。
    • 很棒的答案!只有一个 LOC!
    • 我认为您应该在调用此方法之前制作 subviews 数组的副本,因为您不应该使用使原始数组发生变异的方法来调用 makeObjectsPerformSelector:。这将。
    • 你应该使用 forEach 而不是 map,因为 map 返回一个数组。
    【解决方案3】:

    除了 Ricardo de Cillo's,在我的例子中,我有一个表视图,其中包含我想要删除的子视图中的图像视图。

    for (UIView *v in self.tableview.subviews) {
      if ([v isKindOfClass:[UIImageView class]]) {
        [v removeFromSuperview];
      }
    }
    

    删除 !在 if 命令中,将 scrollview 更改为 self.tableview 删除所有图像,但保持表格视图不变。

    【讨论】:

      【解决方案4】:

      如果你想去掉scrollview.subviews中的uiimageviews,并且你还想保留垂直和水平指示器。您可以设置一个特殊的“标签”来识别视图并排除默认标签为0的垂直和水平指标。

      【讨论】:

        【解决方案5】:

        我认为您只需要小心,不要删除滚动指示条。

        Adam Ko 给出的代码简短而优雅,但它可能会删除水平和垂直滚动指示器。

        我经常这样做

        for (UIView *v in scrollView.subviews) {
          if (![v isKindOfClass:[UIImageView class]]) {
            [v removeFromSuperview];
          }
        }
        

        假设您没有手动将 UIImageView 添加到滚动中。

        【讨论】:

        • 对于我的测试,我的代码没有删除滚动指示器,我相信这是因为 UIScrollView 在需要显示时会延迟加载指示器,但这是一个需要注意的好点。
        • 其实我认为这不是一个好的解决方案,因为如果你有 UIImageView 子视图要删除怎么办?
        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多