@Maddy 答案的 Swift 版本:
//create view then add a tag to it. The tag references the view
var myNewView = UIView()
myNewView.tag = 100
//add the view you just created to the window
window.addSubview(myNewView)
//remove the view you just created from the window. Use the same tag reference
window.viewWithTag(100)?.removeFromSuperview
更新
这是另一种在不使用窗口标签的情况下删除 UIView 的方法。关键是视图必须是实例属性。
lazy var myNewView: UIView = {
let view = UIView()
return view
}()
viewDidLoad() {
guard let window = UIApplication.shared.windows.first(where: \.isKeyWindow) else { return }
window.addsubView(myNewView)
}
// call this in deinit or wherever you want to remove myNewView
func removeViewFromWindow() {
guard let window = UIApplication.shared.windows.first(where: \.isKeyWindow) else { return }
if myNewView.isDescendant(of: window) {
print("myNewView isDescendant of window")
}
for view in window.subviews as [UIView] where view == myNewView {
view.removeFromSuperview()
break
}
if myNewView.isDescendant(of: window) {
print("myNewView isDescendant of window")
} else {
print("myNewView is REMOVED from window") // THIS WILL PRINT
}
}
deinit() {
removeViewFromWindow()
}