Actualice el MaxLayoutWidth preferido para una UILabel multilínea con tamaño desconocido (Diseño automático)

Tengo una class de vista personalizada que henetworkinga de UIView . Esta class tiene una UILabel como su subvista. En la function de init de esta class de vista personalizada configuré todo lo necesario así:

 //h-file #import <UIKit/UIKit.h> @interface MyCustomView : UIView @property (strong, nonatomic) UILabel *myLabel; @end //m-file @implementation MyCustomView @synthesize myLabel = _myLabel; - (id)init { self = [super init]; if (self) { _myLabel = [UILabel new]; if(_textView){ _myLabel.highlightedTextColor = [UIColor whiteColor]; _myLabel.translatesAutoresizingMaskIntoConstraints = NO; _myLabel.lineBreakMode = NSLineBreakByWordWrapping; _myLabel.numberOfLines = 0; _myLabel.backgroundColor = [UIColor clearColor]; [self addSubview:_myLabel]; } } return self; } @end 

También MyCustomView un montón de restricciones para administrar el relleno dentro de mi vista personalizada; además, hay restricciones para el layout de múltiples MyCustomView también para los ejes verticales y horizontales.

Para get una salida de label multilínea, tengo que configurar la propiedad prefernetworkingMaxLayoutWidth MaxLayoutWidth de UILabel myLabel . El ancho depende del espacio libre disponible. En http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html , leí que puedo permitir que el layout automático calcule el ancho primero y lo establezca como prefernetworkingMaxLayoutWidth después del marco de MyCustomView -instancia (la label dentro está sola forrada en este momento) ha sido configurada.

Si pongo la siguiente function en MyCustomView , la label aún tiene una sola línea de text:

 - (void)layoutSubviews { [super layoutSubviews]; float width = _myLabel.frame.size.width; _myLabel.prefernetworkingMaxLayoutWidth = width; [super layoutSubviews]; } 

Si configuro el valor prefernetworkingMaxLayoutWidth de MaxMayoutWidth dentro de la function init , la label es multilínea.

¿Alguien sabe lo que estoy haciendo mal aquí?

¡Gracias por adelantado!

Sin ver todas las restricciones que ha configurado para su vista personalizada y la vista de supervisión que lo contiene, es realmente difícil determinar el problema, sugiero que imprima todos los frameworks de vista de toda la jerarquía de vista a partir de la vista del controller de vista en viewDidLayoutSubviews y determine si la label y sus supervisas tienen el marco correcto.

He encontrado problemas similares con el tamaño de la label dinámica y la vista de desplazamiento, así que he creado un prototipo aquí, podría ser útil para ti también: https://github.com/briandotnet/AutoLayoutScrollViewExperiment