【问题标题】:Subview doesn't remove after calling from ViewDidLoad从 ViewDidLoad 调用后子视图不删除
【发布时间】:2019-08-22 20:39:16
【问题描述】:

我添加了一个UIBlurEffect,它具有在从服务器加载数据之前加载它的功能。我添加了一个boolean 参数来激活或停用它。

func addingEffectLayerWithSpinner(active: Bool){
    let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    if active {
        view.addSubview(blurEffectView)
    } else {
        //This one is not working
        blurEffectView.removeFromSuperview()
    }
}

viewDidLoad 中,我将false 传递给该函数以删除UIBlueEffect 视图,但它不起作用,您能帮我解决问题吗?

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.delegate = self
    addingEffectLayerWithSpinner(active: true)

    profile.showingProfile { result in
        switch result {
        case .success(_):
            // Sucesss response from server
            DispatchQueue.main.async {
                self.nameLabel?.text = nameOfUser!
                self.avatar?.downloaded(from: avatarUrl!)

                //This one is not working
                self.addingEffectLayerWithSpinner(active: false)
            }
            // failed response from server
        case .failure(let error):
            print(error)
        }

    }
}

【问题讨论】:

    标签: swift subview


    【解决方案1】:
    let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    

    问题就在这里。每次调用上述 blurEffectView 时,都会准备一个新的 UIVisualEffectView,它与现在呈现的不同。

    blurEffectView.frame = view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    if active {
        view.addSubview(blurEffectView)
    } else {
        //This one is not working
        blurEffectView.removeFromSuperview()
    }
    

    所以你可以考虑将 blurEffectView 保存为属性,然后调用删除它。

    var  blurEffectView :  UIVisualEffectView!
    
    func addingEffectLayerWithSpinner(active: Bool){
    
    //introduce a false condition early: 
    if !active {  blurEffectView.removeFromSuperview()
     return
    } 
    
    let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.light)
    
    blurEffectView = UIVisualEffectView(effect: blurEffect)
    //remove `let` here
    blurEffectView.frame = view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    
        view.addSubview(blurEffectView)
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      相关资源
      最近更新 更多