You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用removeFromSuperview()删除UI界面中self.view的子视图

解决方案

问题根因

你调用view.removeFromSuperview()时操作的是self.view本身,该方法的作用是将方法调用者从它的父视图中移除,自然会把整个UI视图都移除。你的目标是移除self.view上挂载的所有子视图,所以操作对象应该是self.view.subviews数组中的每一个元素。

正确实现代码

Swift 版本

self.view.subviews.forEach { $0.removeFromSuperview() }

适配说明:iOS 13及更低版本中该写法也可以正常运行,遍历的是subviews的快照副本,不会出现边遍历边修改数组导致的异常。

Objective-C 版本

// 简化写法,批量调用子视图的移除方法
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

// 倒序遍历写法,兼容所有系统版本
for (UIView *subview in [self.view.subviews reverseObjectEnumerator]) {
    [subview removeFromSuperview];
}

可选扩展

如果需要保留部分指定子视图,可在遍历逻辑中增加判断条件:

// Swift示例:保留tag为999的子视图,其余全部移除
self.view.subviews.forEach { subview in
    guard subview.tag != 999 else { return }
    subview.removeFromSuperview()
}

内容的提问来源于stack exchange,提问作者DHANA_Nagarajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:05