如何在 Swift 4 中向 UIView 添加子视图?
Posted
技术标签:
【中文标题】如何在 Swift 4 中向 UIView 添加子视图?【英文标题】:How add subview to UIView in Swift 4? 【发布时间】:2017-09-28 11:37:54 【问题描述】:需要在 Swift 3 和 Swift 4 (ios 10+) 中工作
@IBOutlet weak var viewBody: UIView!
@objc var loadIndicator = UIActivityIndicatorView()
@objc let loadBody = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
@objc func activityLoad()
DispatchQueue.main.async()
self.loadIndicator.removeFromSuperview()
self.loadBody.removeFromSuperview()
self.loadBody.frame = CGRect(x: self.viewBody.frame.midX - 23, y: self.viewBody.frame.midY - 23, width: 46, height: 46)
self.loadBody.layer.cornerRadius = 10
self.loadBody.alpha = 1//0.7
self.loadBody.layer.masksToBounds = true
self.loadIndicator = UIActivityIndicatorView(activityIndicatorStyle: .white)
self.loadIndicator.frame = CGRect(x: 0, y: 0, width: 46, height: 46)
self.loadIndicator.startAnimating()
self.loadBody.addSubview(self.loadIndicator)
self.viewBody.addSubview(self.loadBody)
错误:不要将子视图直接添加到视觉效果视图本身,而是将它们添加到-contentView。'
如果我添加 self.viewBody.contentView.addSubview(self.loadBody)
错误:UIView 类型的值没有成员 contentView。
我需要你的帮助。非常感谢。
【问题讨论】:
编译器似乎认为viewBody
是UIVisualEffectView
的一个实例。尝试清理项目。
viewBody 框架?
显示loadBody
的声明
@objc let loadBody = UIVisualEffectView(效果: UIBlurEffect(style: .dark))
UIVisualEffectView 有一个contentView
属性,你应该将子视图添加到这个contentView
。所以只需将您的代码更改为self.loadBody.contentView.addSubview(self.loadIndicator)
。
【参考方案1】:
UIVisualEffectView 有一个 contentView 属性,你应该给这个 contentView 添加子视图。所以只需将您的代码更改为 self.loadBody.contentView.addSubview(self.loadIndicator)。 – mrfour 20 分钟前
【讨论】:
【参考方案2】:苹果这么说;
根据所需的效果,效果可能会影响内容分层 添加到视觉效果视图的视图或内容的后面 内容视图。将视觉效果视图应用于现有视图,然后 应用 UIBlurEffect 或 UIVibrancyEffect 对象来应用模糊或 对现有视图的活力效果。添加视觉效果后 查看视图层次结构,将任何子视图添加到 contentView 视觉效果视图的属性。 不要直接添加子视图 视觉效果视图本身。
将您的子视图添加到视觉效果视图的内容视图中
self.loadBody.contentView.addSubview(self.loadIndicator)
【讨论】:
以上是关于如何在 Swift 4 中向 UIView 添加子视图?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据传递到 UIView 侧的嵌入式 UIViewController - Swift 5
如何在 iOS 中向 UIView 添加第二个 UITabBar(控制器?)
swift [添加子视图和填充]添加子视图并填写#tags:uiview