假设我在UILabel中有以下文本(一长行动态文本):

由于外星军队的数量远远超过了团队,玩家必须利用后世界末日的优势,比如在垃圾箱、柱子、汽车、瓦砾和其他物体后面寻找掩护。

我想调整UILabel的高度,这样文本就可以放进去了。我使用以下属性的UILabel,使文本内包装。

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

如果我的方向不对,请告诉我。谢谢。


当前回答

检查这个工作完美,没有添加单行代码。使用自动布局()

我根据你的要求做了一个demo给你从下面的链接下载,

自动调整UIView和UILabel的大小

循序渐进指南:-

步骤1:-设置约束为UIView

1)领先2)领先3)落后(主视图)

步骤2:—将constraint设置为Label 1

1)领先2)顶部3)尾随(从它的父视图)

步骤3:-将constraint设置为Label 2

1)领先2)尾随(从它的父视图)

第4步:-最棘手的给按钮的UILabel从UIView。

步骤5:-(可选)将constraint设置为UIButton

1)领先2)底部3)后拖4)固定高度(从主视图开始)

输出:

注意:-确保在Label属性中设置了Number of lines =0。

我希望这个信息足以理解Autoresize UIView根据UILabel的高度和Autoresize UILabel根据文本。

其他回答

一行是克里斯的答案是错的。

newFrame.size.height = maximumLabelSize.height;

应该是

newFrame.size.height = expectedLabelSize.height;

除此之外,这是正确的解决方案。

我的代码:

UILabel *label      = [[UILabel alloc] init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text          = text;
label.textAlignment = NSTextAlignmentCenter;
label.font          = [UIFont fontWithName:_bodyTextFontFamily size:_bodyFontSize];

CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];


float height        = size.height;
label.frame         = CGRectMake(x, y, width, height);

斯威夫特2:

    yourLabel.text = "your very long text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.frame.size.width = 200
    yourLabel.frame.size.height = CGFloat(MAXFLOAT)
    yourLabel.sizeToFit()

有趣的是sizeToFit()将frame.size.height设置为最大浮动,这将为长文本提供空间,但sizeToFit()将强制它只使用必要的,但总是在设置.frame.size.height后调用它。

我建议为调试目的设置. backgroundcolor,这样你就可以看到为每个情况呈现的帧。

当自动布局被启用时,调整大小不工作:)

对我来说,最简单和更好的方法是将高度约束应用于标签,并将优先级设置为低,即storyboard中的(250)。

所以你不需要担心通过编程计算高度和宽度,多亏了storyboard。