Normalmente, basta definir o tipo de botão como Personalizado funciona para mim, mas por outros motivos, precisei subclassificar UIButton e definir o tipo de botão novamente para o padrão (Sistema), para que o pisque reapareça.
Definir UIView.setAnimationsEnabled(false)
antes de alterar o título e depois retornar a verdade depois disso não evitou piscar para mim, não importa se eu chamasseself.layoutIfNeeded()
ou não.
Isso, e somente isso na seguinte ordem exata, funcionou para mim no iOS 9 e 10 beta:
1) Crie uma subclasse para o UIButton (não esqueça de definir também a classe personalizada para o botão no Storyboard).
2) Substitua da setTitle:forState:
seguinte forma:
override func setTitle(title: String?, forState state: UIControlState) {
UIView.performWithoutAnimation({
super.setTitle(title, forState: state)
self.layoutIfNeeded()
})
}
No Interface Builder, você pode deixar o tipo de botão como Sistema, sem precisar alterá-lo para Tipo Personalizado para que essa abordagem funcione.
Espero que isso ajude outra pessoa, lutei por tanto tempo com os botões irritantes que espero evitar isso para os outros;)