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 }()
3 Réponses :
lazy var submitBtn: UIButton = { let btn = UIButton(type: .custom) //Set custom instead of system btn.translatesAutoresizingMaskIntoConstraints = false btn.setTitle("SUBMIT", for: .normal) return btn }()
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 () P>
Testez-le en imprimant Self.Bounds
Je réglais manuellement le cadre du bouton CGRRECT (x: 0, Y: 0, largeur: 100, hauteur: 40) code>, événement que les contraintes de présentation sont ajoutées et
TraduitAutoresizingMaskintOINTAINTAINES code> est réglé sur
faux code> fait ce travail.
Je ne sais pas pourquoi les limites sont 0 lorsque les contraintes sont définies.
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 }
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 () code> dans
ViewDidAppear () code> et pas dans
ViewDidLayouTouSubviews () code>, qui crée un retard dans l'affichage du gradient de boutons.