swift - 如何从超级视图中删除以编程方式创建的 UIView
问题描述
我想在从 API 调用加载内容的同时实现加载覆盖,但是当我去关闭视图时;我没有成功。
func viewLoading(show:Bool, boxView: UIView, error: Bool, errorMessage: String){
let myNewView=UIView(frame: CGRect(x: 0, y: 0, width: boxView.frame.width, height: boxView.frame.height))
if show{
// Change UIView background colour
myNewView.backgroundColor = UIColor.black.withAlphaComponent(0.75)
myNewView.isOpaque = false
// Add rounded corners to UIView
myNewView.layer.cornerRadius = boxView.layer.cornerRadius
let activityView = UIActivityIndicatorView(style: .whiteLarge)
activityView.center = myNewView.center
activityView.startAnimating()
boxView.addSubview(myNewView)
myNewView.addSubview(activityView)
}else{
print("Done")
DispatchQueue.main.async(execute: { () -> Void in
myNewView.removeFromSuperview()
self.view.bringSubviewToFront(boxView)
})
myNewView.isHidden = true
}
}
其他选项都没有奏效,我迷失了解决方案。
编辑:我希望相同的功能在一个视图控制器中容纳三个不同的视图。
解决方案
每次调用该方法时,您都在创建一个新视图,然后您试图消除该新创建的视图。相反,您应该在显示视图时保存该视图的引用,并removeFromSuperview
在需要隐藏它时调用该实例。
推荐阅读
- javascript - 子元素的唯一键道具问题
- android-studio - 应用更新 Android Studio 版本名称和版本代码
- keyboard - 如果按下快捷键,如何获取热键定义?
- overflow - 容器滑动时隐藏文本
- python - 销毁项目的密码
- javascript - 如何修复以下代码中的“设置未定义”错误?不和谐.js v13
- python - 按元素对文件夹内的文件进行排序
- javascript - 如何更改这样的 JSON 解析器?
- xcode - 如何摆脱 Xcode 中的错误或重复提交?
- reactjs - 如何在 React useState 数组中存储 svg 元素(路径、圆、椭圆...等),以便能够更改或删除 svg 中的特定元素