从UIScrollView中删除所有子视图?

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

scrollView成为UIScrollView一个实例。

在Objective-C中,这非常简单。 只要调用makeObjectsPerformSelector:就像这样:

Objective-C的:

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

在Swift中,你不能获得运行时访问,所以你必须亲自处理迭代。

迅速:

一个简洁的版本, 从这里 :

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

一个更具描述性的方法来做到这一点(从这里 )假设scrollview.subviews

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

我想你只需要小心,不要删除滚动指示条。

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

我通常这样做

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

使用你没有UIImageView的手动添加到滚动。

除了Ricardo de Cillo之外,在我的例子中,我有一个表格视图,在子视图中有图像视图,我想删除它们。

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

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

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

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

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