Обычно просто установка типа кнопки на Custom работает для меня, но по другим причинам мне нужно было создать подкласс UIButton и установить тип кнопки обратно на значение по умолчанию (System), чтобы мигающее изображение появилось снова.
настройка UIView.setAnimationsEnabled(false)
перед изменением названия и затем снова на истину после этого не избежала мигания для меня, независимо от того, звонил я self.layoutIfNeeded()
или нет.
Это, и только это в следующем точном порядке, работало для меня с iOS 9 и 10 бета:
1) Создайте подкласс для UIButton (не забудьте также установить собственный класс для кнопки в раскадровке).
2) Переопределите setTitle:forState:
следующим образом:
override func setTitle(title: String?, forState state: UIControlState) {
UIView.performWithoutAnimation({
super.setTitle(title, forState: state)
self.layoutIfNeeded()
})
}
В Интерфейсном Разработчике вы можете оставить тип кнопки «Система», не нужно менять его на «Пользовательский тип», чтобы этот подход работал.
Надеюсь, это поможет кому-то еще, я так долго боролся с раздражающими мигающими кнопками, что надеюсь избежать этого для других;)