2017-03-03 69 views
0

我试图给我的视图添加一个模糊效果。我创建像这样模糊效果不出现在UITableViewCell

let blurLabel: UIVisualEffectView = { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark) 
    let blurEffectView = UIVisualEffectView(effect: blurEffect) 


    return blurEffectView 
    }() 

模糊效果然后我把它添加到子视图像这样,并设置了该软件的约束以及

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: .subtitle, reuseIdentifier: reuseIdentifier) 
     let view = tableViewCell 

     addSubview(view) 
     view.addSubview(blurLabel) 

blurLabel.leftAnchor.constraint(equalTo: self.leftAnchor,constant:0).isActive = true 
     //blurLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 178).isActive = true 
     blurLabel.widthAnchor.constraint(equalToConstant: 375).isActive = true 
     blurLabel.heightAnchor.constraint(equalToConstant: 180).isActive = true 

但是当我运行应用程序,它不根本不出现

回答

0

编辑:正如@HAS & @Fogmeister建议的那样,您也可以使用translatesAutoResizingMaskIntoConstraints = false,因为在没有指定明确帧的情况下使用自动布局是更好的解决方案。

你将不得不分配UIVisualEffectView这样的:

let blurLabel: UIVisualEffectView = { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark) 
    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    blurEffectView.frame = CGRect(x: 0, y: 0, width: 60, height: 40) //give desirable frame 
    return blurEffectView 
}() 
+0

这应该没有必要。由于您已经使用了自动布局,因此您应该能够设置模糊视图的'translatesAutoResizingMaskIntoConstraints = false',以便自动布局不会尝试给它一个零宽度和高度(因为您没有使用它假定的框架初始化它{0,0,0,0}的帧)。正如Arpit所说,有一种可能性是设置一个新的框架,但我认为一个更清晰的解决方案是使用自动布局而没有明确的框架。 – HAS

+1

是的,@HAS在这里是正确的。你需要做的是设置'translatesAutoResizingMaskIntoConstraints = false'。哦,是的,他已经说过:D – Fogmeister

0

如果你想,而不是给明确的框架,你也可以提供你blurView的任何视图或子视图。

let blurLabel: UIVisualEffectView = { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark) 
    let blurEffectView = UIVisualEffectView(effect: blurEffect)  
    blurEffectView.frame = myMainview.bounds //Blur effect's frame 
    return blurEffectView 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Use it somewhere using 
    self.view.insertSubview(blurEffectView, belowSubview: myAnotherView) 
    // You may also use any of the subviews too, instead of the self.view 
    /// self.myView.insertSubview(blurEffectView, belowSubview: myAnotherView) 
} 
0

要解决这个问题,您只需要停止它自动创建约束。像这样...

let blurLabel: UIVisualEffectView = { 
    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark) 
    let blurEffectView = UIVisualEffectView(effect: blurEffect) 
    // this line will stop constraints being added for a zero frame 
    blurEffectView.translatesAutoResizingMaskIntoConstraints = false 
    return blurEffectView 
}()