Warning from iOS “Do not add subviews directly to the visual effect view itself”

一笑奈何 提交于 2019-11-30 04:49:34

问题


I have a function below and when I link with the iOS 11 SDK, I get an error:

Do not add subviews directly to the visual effect view itself, instead add them to the -contentView.

The problem can be solved by changing

let effectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))"

to

effectView = UIView()

but the effect is not present that way. How can I keep using UIVisualEffectView instead of UIView? I want to keep the effect.

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)
}

回答1:


Just follow what the error says and add your subviews to UIVisualEffectView's contentView.

effectView.contentView.addSubview(activityIndicator)
effectView.contentView.addSubview(strLabel)



回答2:


Apple says that;

Depending on the desired effect, the effect may affect content layered behind the view or content added to the visual effect view’s contentView. Apply a visual effect view to an existing view and then apply a UIBlurEffect or UIVibrancyEffect object to apply a blur or vibrancy effect to the existing view. After you add the visual effect view to the view hierarchy, add any subviews to the contentView property of the visual effect view. Do not add subviews directly to the visual effect view itself.

So, as per @the4kman add your subviews to content view of visual effect view

 effectView.contentView.addSubview(activityIndicator)
 effectView.contentView.addSubview(strLabel)



回答3:


let messageFrame = UIView()
var activityIndicator = UIActivityIndicatorView()
var strLabel = UILabel()
effectView = UIView()

   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: UIFontWeightMedium)
    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)
}

when start :

     activityIndicator("Your Text")

when Finished :

    self.effectView.removeFromSuperview()


来源:https://stackoverflow.com/questions/46355872/warning-from-ios-do-not-add-subviews-directly-to-the-visual-effect-view-itself

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!