UILabel 调整大小不起作用
Posted
技术标签:
【中文标题】UILabel 调整大小不起作用【英文标题】:UILabel resize won't work 【发布时间】:2014-02-20 20:50:17 【问题描述】:我有一个 UIVIew,里面有一个 UILabel,我希望 UILabel 和 UIView 来包装文本内容的大小。 所以我计算了文本大小,并将 UIView 的框架和 UIlabel 的框架设置为新的高度。 UIView 可以完美调整大小,但 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 中的框架,我应该在其他地方进行吗?
更新: 我正在使用带有一些约束的自动布局。我需要自动布局,因为我有一个基于导航栏和标签栏的应用程序。
【问题讨论】:
该代码看起来应该可以正常工作。您是否在代码中的其他任何地方调整标签框架,可能会覆盖您在此处所做的事情? 不是真的:S,我正在使用自动布局,也许这就是问题所在。 我从来没有使用过自动布局,所以我没有帮助。 【参考方案1】:如果您使用 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
。
【讨论】:
非常好的答案,解决了我所有的疑惑!我将尝试约束方法,看看效果如何。谢谢! 在通过代码编辑大小时必须删除自动布局以停止出现问题。 +1以上是关于UILabel 调整大小不起作用的主要内容,如果未能解决你的问题,请参考以下文章