如何在 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。

我需要你的帮助。非常感谢。

【问题讨论】:

编译器似乎认为viewBodyUIVisualEffectView 的一个实例。尝试清理项目。 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 4 中添加问题

swift [添加子视图和填充]添加子视图并填写#tags:uiview

将 UIView 添加为子视图并在 Swift 中确定它们在视图层次结构中的位置

如何在 Swift 中向响应式网站添加后退按钮