Parent UIView no cambia el tamaño después de constraint.constant en UILabel cambiado

ACTUALIZAR

Ahora resuelto El problema fue que cuando estaba actualizando el bottomConstraint estaba estableciendo la propiedad Constant en el relleno inferior. Suena razonable pero, por supuesto, la Constant debería haberse establecido en 0 - BottomPadding . Eso explica por qué la parte inferior del text no era visible, estaba siendo limitada más allá de su contenedor de recorte.

Tengo un control personalizado UIView simple llamado PaddedLabel que envuelve (no henetworkinga) un UILabel

La jerarquía de vista es

PaddedLabel -> UILabel

Cuando las restricciones en el UILabel tienen sus constantes actualizadas, la vista exterior no cambia la altura. Es como si la UIView exterior estuviera viendo solo la altura de la label como la altura que necesita en lugar de la altura de la label más las constantes. Así es como se ve

introduzca la descripción de la imagen aquí

En UpdateConstraints agrego algunas restricciones y si hay un valor de Texto, establezco la Constante en la Restricción en el valor que quiero para relleno, de lo contrario, establezco la Constante en 0.

 public override void UpdateConstraints() { base.UpdateConstraints(); if (this.constraintsApplied == false) { this.leftConstraint = NSLayoutConstraint.Create(this.NestedLabel, NSLayoutAttribute.Left, NSLayoutRelation.Equal, this, NSLayoutAttribute.Left, 1.0f, this.LeftPadding); this.AddConstraint(this.leftConstraint); this.rightConstraint = NSLayoutConstraint.Create(this.NestedLabel, NSLayoutAttribute.Right, NSLayoutRelation.Equal, this, NSLayoutAttribute.Right, 1.0f, 0 - this.RightPadding); this.AddConstraint(this.rightConstraint); this.topConstraint = NSLayoutConstraint.Create(this.NestedLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, this, NSLayoutAttribute.Top, 1.0f, this.TopPadding); this.AddConstraint(this.topConstraint); this.bottomConstraint = NSLayoutConstraint.Create(this.NestedLabel, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, this, NSLayoutAttribute.Bottom, 1.0f, 0 - this.BottomPadding); this.AddConstraint(this.bottomConstraint); this.constraintsApplied = true; } if (this.Text.HasValue()) { this.topConstraint.Constant = this.TopPadding; // The following code was the problem. // It should have been 0 - this.BottomPadding Now corrected // this.bottomConstraint.Constant = this.BottomPadding;</del> this.bottomConstraint.Constant = 0 - this.BottomPadding; } else { this.topConstraint.Constant = 0; this.bottomConstraint.Constant = 0; } } 

Cuando se establece la propiedad Text, establezco la propiedad Text en el UILabel interno y SetNeedsUpdateConstraints

 public string Text { get { return this.text; } set { if (this.text == value) { return; } this.text = value; this.nestedLabel.Text = value; this.SetNeedsUpdateConstraints(); } } 

Si desea que la vista PaddedLabel se expanda y se ajuste alnetworkingedor de la UILabel interior, cambie la restricción inferior. Desea atar la parte inferior de PaddedLabel al final de UILabel, de modo que cuando UILabel crezca, se expandirá PaddedLabel. Tal como es ahora, le estás diciendo a UILabel que se aplane dentro de la vista PaddedLabel.

Invierta el bottomConstraint y debe configurarlo.