UILabel调整大小将无法正常工作

问题描述:

我有一个内部UILabel的UIVIew,我希望UILabel和UIView包装文本内容大小。 因此,我计算文字大小,并将UIView的框架和UIlabel的框架设置为新的高度。 UIView完美调整大小,但UILabel不会调整大小。总是保持相同的尺寸。不知道为什么UILabel调整大小将无法正常工作

这里是我的代码:

[mylabel setNumberOfLines:0]; 
CGSize maximumLabelSize = CGSizeMake(mylabel.frame.size.width, 160); 
CGSize expectedLabelSize = [text sizeWithFont:mylabel.font 
             constrainedToSize:maximumLabelSize 
              lineBreakMode:mylabel.lineBreakMode]; 
CGRect newFrame = mylabel.frame; 
newFrame.size.height = expectedLabelSize.height; 
mylabel.frame = newFrame; 
mylabel.text = text; 

myView.frame = CGRectMake(myView.frame.origin.x, 
           myView.frame.origin.y, 
           myView.frame.size.width, 
           newFrame.size.height); 

PD:我改变了帧viewDidLayoutSubviews,我应该去做别的地方?

更新: 我在使用Autolayout时遇到了一些限制。我需要Autolayout,因为我有一个导航栏和基于标签栏的应用程序。

+0

该代码看起来应该很好。你是否在代码中的其他任何地方调整标签框架,以覆盖你在这里做的事情? – Putz1103

+0

不是:S,我正在使用自动布局,可能是导致问题。 – 6rod9

+0

我从来没有使用autolayout,所以我没有帮助。 – Putz1103

如果您使用Autolayout,布局约束将决定视图的大小 - 不建议您使用Autolayout并更改视图框架,因为结果并不总是可预测的。

如果您只是想将UILabel设置为UIView的大小,那么请确保UILabel对高度和宽度的约束与UIView相同。 UILabels具有固有尺寸(标签'应该'的尺寸)。除非另有约束,否则该标签将始终设置为固有尺寸。

该视图应该对高度/宽度有一些限制。如果您在Xcode中设置了这些参数,请将IBOutlet设置到您的控制器中以获取这些限制,并更改constant属性。

如果你想在动画的约束的变化,那么你进行更改要更改的约束,然后调用

[UIView animateWithDuration:.5f animations:^{ 
    [self.view layoutIfNeeded]; 
}]; 

调用layoutIfNeeded将导致自动布局限制进行重新评估。在动画中调用它将动画改变约束。

从外观上看,你想要的是将UILabel约束为与UIView相同的高度/宽度,并且在UIView上有一个用于高度约束的IBOutlet。将该IBOutlet上的constant属性更改为所需的高度,然后从动画块内部调用layoutIfNeeded

+0

真的很好的答案,并清除我所有的疑惑!我会尝试约束方法,看看它是如何发展的。谢谢! – 6rod9

+0

必须删除自动布局,以便在通过代码编辑尺寸时停止出现问题。 +1 – voghDev