Sto affrontando un problema simile, aveva larghezza limitata per il mio pulsanti e voleva che crescessero verticalmente, a seconda della quantità di testo che avrei dato loro. Ho finito con una soluzione semplice, sulla base di quello che ho imparato nella documentazione di Apple (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ImplementingView/ImplementingView.html)
ho sottoclasse UIButton
e sovrascritto due funzioni:
- (void)setBounds:(CGRect)bounds {
if (!CGRectEqualToRect(bounds, self.bounds)) {
[self invalidateIntrinsicContentSize];
}
[super setBounds:bounds];
}
- (CGSize)intrinsicContentSize {
//
CGSize size;
self.titleLabel.frame = CGRectMake(self.titleLabel.frame.origin.x,
self.titleLabel.frame.origin.y,
self.frame.size.width - self.contentEdgeInsets.left - self.contentEdgeInsets.right - self.titleEdgeInsets.left - self.titleEdgeInsets.right,
0);
size = [self.titleLabel sizeThatFits:self.titleLabel.frame.size];
size = CGSizeMake(size.width, size.height + 20);
return size;
}
Cosa succede in pratica qui è che il pulsante invalida le sue dimensioni intrinseche (solo quando i set di limiti sono in realtà nuovi - questo è per prevenire un loop infinito), e quando il sistema chiede la dimensione del contenuto intrinseco, lo ricalcolo in base alla larghezza del pulsante. L'altezza extra 20px è per l'imbottitura. Ho provato molti altri modi, ma poiché il mio layout è tutto basato su AutoLayout, volevo qualcosa che non dovessi aggiornare ogni volta che il dispositivo ruotasse o meno. Questo semplicemente funziona.
Buona fortuna! Z.
fonte
2015-03-01 17:13:10
Mi hai condotto nella giusta direzione ... grazie! – TigerCoding