0
votes

Le gradient de boutons ne fonctionne pas lorsqu'il est ajouté à viewDidLayouTouSubviews

J'ajoute un gradient de bouton à l'aide du code ci-dessous

lazy var submitBtn: UIButton = {
    let btn = UIButton(type: .system)
    btn.translatesAutoresizingMaskIntoConstraints = false
    btn.setTitle("SUBMIT", for: .normal)
    return btn
}()


2 commentaires

Vous passez l'emplacement NIL et X, la position Y est zéro et vérifiez le code de gradient.


L'affichage de gradient seulement si je place initstyle () dans ViewDidAppear () et pas dans ViewDidLayouTouSubviews () , qui crée un retard dans l'affichage du gradient de boutons.


3 Réponses :


0
votes
lazy var submitBtn: UIButton = {
    let btn = UIButton(type: .custom) //Set custom instead of system
    btn.translatesAutoresizingMaskIntoConstraints = false
    btn.setTitle("SUBMIT", for: .normal)
    return btn
}()

0 commentaires

2
votes

Je pense que le problème ici est que Self.bounds est 0 au point que vous appelez votre fonction de gradient. Essayez de l'appeler ultérieurement, par exemple ViewWillappear ou appelez la vue.Layoutsubviews pour déclencher IewDidLayouTouSubs ()


3 commentaires

Testez-le en imprimant Self.Bounds


Je réglais manuellement le cadre du bouton CGRRECT (x: 0, Y: 0, largeur: 100, hauteur: 40) , événement que les contraintes de présentation sont ajoutées et TraduitAutoresizingMaskintOINTAINTAINES est réglé sur faux fait ce travail.


Je ne sais pas pourquoi les limites sont 0 lorsque les contraintes sont définies.



0
votes

Essayez d'utiliser la fonction à l'intérieur Viewwillappeare ()

Aussi pourquoi ne pas appliquer le gradient dans le bouton du début sans fonction séparée? Cela fera que le bouton apparaisse au gradient déjà intégré. p>

Si vous souhaitez définir le gradient W \ A condition, vous pouvez utiliser le suivant P>

func displayButton(condition: Bool){


lazy var submitBtn: UIButton = {
let btn = UIButton(type: .system)
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("SUBMIT", for: .normal)

if condition == true {
//set the gradient here
return btn
} else if condition == false
return btn
}

}()



override func viewDidLoad(){
super.viewDidLoad()
 //here you can set the condition to show the gradient or not depending on what you want
displayButton(true) //will show the gradient
displayButton(false) // will show without gradient

}


0 commentaires