2017-03-03 5 views
0

J'essaie d'ajouter un effet de flou à ma vue. J'ai créé l'effet de flou comme siL'effet de flou n'apparaît pas dans UITableViewCell

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


    return blurEffectView 
    }() 

Puis-je ajouter à la sous-vue comme si, et mettre en place les contraintes avec aussi bien

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 

Mais quand je lance l'application elle ne présente pas apparaît à tous

Répondre

0

Modifier: Comme suggéré par @HAS & @Fogmeister, vous pouvez également utiliser translatesAutoResizingMaskIntoConstraints = false car il est préférable d'utiliser Auto Layout sans spécifier les cadres explicites.

Vous devrez attribuer cadre-UIVisualEffectView comme ceci:

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

Cela ne devrait pas être nécessaire. Puisque vous utilisez déjà la mise en page automatique, vous devriez pouvoir régler la translateAutoResizingMaskIntoConstraints = false de la vue du flou de façon à ce que la mise en page automatique n'essaie pas de lui donner une largeur et une hauteur nulles (car vous ne l'avez pas initialisée trame de {0, 0, 0, 0}). Comme Arpit l'a dit une possibilité est de définir un nouveau cadre, mais je pense qu'une solution plus propre est d'utiliser autolayout sans cadres explicites. – HAS

+1

Oui, @HAS est correct ici. Ce que vous devez faire est de définir 'translatesAutoResizingMaskIntoConstraints = false'. Oh, oui, il a déjà dit ça: D – Fogmeister

0

Si vous le souhaitez, au lieu de donner des cadres explicites, vous pouvez également fournir vos blurView de l'une vue ou, subviews.

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

Pour corriger cela, il suffit de l'arrêter automatiquement en créant des contraintes. Comme ceci ...

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