如何正确使用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
相关产品推荐
相关产品推荐

