Habituellement, le simple fait de définir le type de bouton sur Personnalisé fonctionne pour moi, mais pour d'autres raisons, je devais sous-classer UIButton et rétablir le type de bouton par défaut (Système), de sorte que le clignotement réapparaissait.
Le réglage UIView.setAnimationsEnabled(false)
avant de changer le titre, puis la valeur true après cela n'a pas évité de clignoter pour moi, que j'appelle self.layoutIfNeeded()
ou non.
Cela, et seulement cela dans l'ordre exact suivant, a fonctionné pour moi avec iOS 9 et 10 bêta:
1) Créez une sous-classe pour UIButton (n'oubliez pas de définir également la classe personnalisée pour le bouton dans le Storyboard).
2) Remplacez setTitle:forState:
comme suit:
override func setTitle(title: String?, forState state: UIControlState) {
UIView.performWithoutAnimation({
super.setTitle(title, forState: state)
self.layoutIfNeeded()
})
}
Dans Interface Builder, vous pouvez laisser le type de bouton à Système, pas besoin de le changer en Type personnalisé pour que cette approche fonctionne.
J'espère que cela aide quelqu'un d'autre, j'ai lutté si longtemps avec les boutons clignotants ennuyeux que j'espère éviter aux autres;)