que he tenido que hacer frente a un problema similar, tenía anchura limitada por mi botones y quería que crezcan verticalmente, dependiendo de la cantidad de texto que les daría. Terminé con una solución simple, basado en lo que he aprendido en la documentación de Apple (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ImplementingView/ImplementingView.html)
He subclases UIButton
y anulado dos funciones:
- (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;
}
Lo que básicamente sucede aquí es que el botón invalida su tamaño intrínseco (solo cuando los límites establecidos son realmente nuevos, esto es para evitar un ciclo infinito), y cuando el sistema solicita el tamaño de contenido intrínseco, lo recalculo en función del ancho del botón. La altura extra de 20px es para relleno. He probado muchas otras maneras, pero desde mi diseño está todo basado en diseño automático, quería algo que yo no tengo que actualizar cada vez que el dispositivo gira más o menos. Esto simplemente funciona.
¡Buena suerte! Z.
Me guió en la dirección correcta ... gracias! – TigerCoding