Ho un UIView che contiene un UIButton. UIButton ha 2 titoli impostati per gli stati UIControlStateNormal ("Follow") e UIControlStateSelected ("Following"). Sto usando il layout automatico su UIButton e ha un vincolo per essere una certa distanza dalla parte superiore del superview e un altro per essere una certa distanza dal lato sinistro del superview. Ho anche usato "Dimensioni per adattarsi ai contenuti" su di esso.La dimensione intrinseca non si aggiorna quando si cambia lo stato di UIButton
Quando si imposta il pulsante nello stato selezionato dal codice, il titolo cambia correttamente ma la larghezza intrinseca di UIButton non cambia in modo che quando si passa da "Segui" a "Seguendo" il testo viene ellittizzato.
self.selected = self.following;
Quando mi avvicino il problema in modo diverso e semplicemente cambiare il testo per UIControlStateNormal quando qualcuno preme il pulsante, il pulsante si trasforma dimensioni in modo corretto.
NSString *title = (self.following) ? @"Following" : @"Follow"
[self setTitle:title forState:UIControlStateNormal];
È questo un bug in UIKit? Mi aspetto che il pulsante cambi la sua dimensione intrinseca per riflettere correttamente la nuova dimensione del testo quando il suo stato cambia, specialmente perché ci sono altre cose che vorrei cambiare oltre al testo per gli stati dei 2 pulsanti.
Qualcuno ha provato questo di recente (iOS 8.2+)? L'unica soluzione diretta che funziona per me è setTitle di @ abdullah: forState. Ho anche provato a seguire quella linea con layoutIfNeeded. –
per essere completo e compatibile con qualsiasi sistema di layout che ho dovuto seguire con chiamare setNeedsLayout e chiamarlo su ogni superview di superview fino a quando non c'è più ... sembra essere l'unico modo in cui il cambiamento si applica a tutto ciò che la dimensione può impatto. (se inserito in sottoview ecc.) – Ben