来自iOS的警告"不要将子视图直接添加到视觉效果视图本身"

use*_*063 6 cocoa-touch subview uiview ios ios11

我有一个函数,当我链接到iOS 11 SDK时,我收到一个错误:

不要将子视图直接添加到视觉效果视图本身,而是将它们添加到-contentView.

这个问题可以通过改变来解决

let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))"
Run Code Online (Sandbox Code Playgroud)

effectView = UIView()
Run Code Online (Sandbox Code Playgroud)

但效果不是这样的.我怎样才能继续使用UIVisualEffectView而不是UIView?我想保持效果.

let imagePicker = UIImagePickerController()
let messageFrame = UIView()
var activityIndicator = UIActivityIndicatorView()
var strLabel = UILabel()    
let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))

func activityIndicator(_ title: String) {  
    strLabel.removeFromSuperview()
    activityIndicator.removeFromSuperview()
    effectView.removeFromSuperview()

    strLabel = UILabel(frame: CGRect(x: 50, y: 0, width: 160, height: 46))
    strLabel.text = title
    strLabel.font = UIFont.systemFont(ofSize: 14, weight: UIFont.Weight.medium)
    strLabel.textColor = UIColor(white: 0.9, alpha: 0.7)

    effectView.frame = CGRect(x: (view.frame.midX - strLabel.frame.width/2), y: (view.frame.midY - strLabel.frame.height/2), width: 160, height: 46)
    effectView.layer.cornerRadius = 15
    effectView.layer.masksToBounds = true

    activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .white)
    activityIndicator.frame = CGRect(x: 0, y: 0, width: 46, height: 46)
    activityIndicator.startAnimating()

    effectView.addSubview(activityIndicator)
    effectView.addSubview(strLabel)
    view.addSubview(effectView)
}
Run Code Online (Sandbox Code Playgroud)

Tam*_*gel 9

只要按照错误说什么,并添加子视图UIVisualEffectViewcontentView.

effectView.contentView.addSubview(activityIndicator)
effectView.contentView.addSubview(strLabel)
Run Code Online (Sandbox Code Playgroud)


Ash*_*ish 6

苹果公司是这么说的;

\n\n
\n

根据所需的效果,该效果可能会影响视图后面分层的内容或添加到视觉效果视图\xe2\x80\x99s\n contentView 的内容。将视觉效果视图应用到现有视图,然后应用 UIBlurEffect 或 UIVibrancyEffect 对象以将模糊或鲜艳效果应用到现有视图。将视觉效果视图添加到视图层次结构后,将任何子视图添加到视觉效果视图的 contentView 属性。不要将子视图直接添加到\n视觉效果视图本身

\n
\n\n

因此,按照 @the4kman 将您的子视图添加到视觉效果视图的内容视图中

\n\n
 effectView.contentView.addSubview(activityIndicator)\n effectView.contentView.addSubview(strLabel)\n
Run Code Online (Sandbox Code Playgroud)\n