Por lo general, simplemente configurar el tipo de botón en Personalizado funciona para mí, pero por otras razones necesitaba subclasificar UIButton y volver a establecer el tipo de botón en el predeterminado (Sistema), por lo que el parpadeo volvió a aparecer.
Establecer UIView.setAnimationsEnabled(false)
antes de cambiar el título y luego volver a verdadero después de eso no evitó el parpadeo para mí, no importa si llaméself.layoutIfNeeded()
o no.
Esto, y solo esto en el siguiente orden exacto, funcionó para mí con iOS 9 y 10 beta:
1) Cree una subclase para UIButton (no olvide configurar la clase personalizada para el botón en el Guión gráfico también).
2) Anular de la setTitle:forState:
siguiente manera:
override func setTitle(title: String?, forState state: UIControlState) {
UIView.performWithoutAnimation({
super.setTitle(title, forState: state)
self.layoutIfNeeded()
})
}
En Interface Builder, puede dejar el tipo de botón en Sistema, no es necesario cambiarlo a Tipo personalizado para que este enfoque funcione.
Espero que esto ayude a alguien más, he luchado durante tanto tiempo con los molestos botones parpadeantes que espero evitarlo para otros;)