import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myLabel: UILabel!
@IBAction func changeTextButtonTapped(sender: UIButton) {
myLabel.text = "my name is really long i want it to fit in this box"
}
}
[label setNumberOfLines:0]; // for multiline label
[label setText:@"label text to set"];
[label sizeToFit];// call this to fit size of the label according to text
name.text = @"Hi this the text I want to fit to"
UIFont * font = 14.0f;
CGSize size = [name.text sizeWithAttributes:@{NSFontAttributeName: font}];
nameOfAssessment.frame = CGRectMake(400, 0, size.width, 44);
nameOfAssessment.font = [UIFont systemFontOfSize:font];
0
你可以显示一行输出然后设置属性 Line=0 并显示多行输出然后设置属性 Line=1 and more
14 回答
请查看我的要点,我为
UILabel
制作了一个非常相似的类别,我的类别让UILabel
伸展它的高度以显示所有内容:https://gist.github.com/1005520或者看看这篇文章:https://stackoverflow.com/a/7242981/662605
这会拉伸高度,但你可以轻松地改变它,以另一种方式工作,并用这样的东西拉伸宽度,这是我相信你想要做的:
您可以更简单地使用
UIView
类中提供的sizeToFit
方法,但将行数设置为1是安全的 .iOS 6更新
如果您使用的是AutoLayout,那么您就拥有了内置的解决方案 . 通过将行数设置为0,框架将适当调整标签大小(添加更多高度)以适合您的文本 .
iOS 8更新
sizeWithFont:
已弃用,请改为使用sizeWithAttributes:
:使用
[label sizeToFit];
将从Daniels类别获得相同的结果 .虽然我建议使用autolayout并让标签根据约束调整自身大小 .
如果我们希望
UILabel
应根据文本大小缩小和扩展,那么具有自动布局的故事板是最佳选择 . 以下是实现此目的的步骤步骤
将UILabel置于视图控制器中并将其放置在您想要的任何位置 . 也将
0
用于UILabel
的numberOfLines
属性 .给它顶部,前导和尾随空间引脚约束 .
Update Frame
并单击Fix Misplacement
. 现在,如果文本较少,此UILabel将缩小,如果文本较多,则会展开 .这并不像其他一些答案那样复杂 .
固定左边和上边
只需使用自动布局添加约束来固定标签的左侧和顶侧 .
之后它会自动调整大小 .
注意事项
不要为宽度和高度添加约束 . 标签具有基于其文本内容的固有大小 .
感谢this answer寻求帮助 .
使用自动布局时无需设置
sizeToFit
. 我的示例项目的完整代码在这里:myLabel.preferredMaxLayoutWidth = 150 // or whatever
. (我还将我的按钮固定在标签的底部,这样当标签高度增加时它会向下移动 . )UITableViewCell
内的动态调整大小标签,请参阅this answer .使用
[label sizeToFit];
调整UILabel中的文本我在上面根据Daniel的回复创建了一些方法 .
这是类别方法 . 您必须首先设置文本,而不是调用此方法来调整UILabel的高度 .
您可以使用两种方式根据文本和其他相关控件调整标签大小 -
在iOS 7.0之前,这可用于计算标签大小
//根据labelTextHeight重新构建其他控件
//在此之后,您可以获取标签框架以重新构建其他相关控件
在故事板中添加缺少的约束 .
在故事板中选择UILabel并将属性"Line"设置为0 .
Ref使用id:label将UILabel Outlet转换为Controller.h
Controller.m并在viewDidLoad中添加
[label sizeToFit];
我在自动布局方面遇到了很大的问题 . 我们在表格单元格中有两个容器 . 根据项目描述(0 - 1000个字符)调整第二个容器的大小,并根据它们调整行的大小 .
缺少的成分是描述的底部约束 .
我已将动态元素的底部约束从 = 0 更改为 >= 0 .
以下是我发现的适用于我的情况:
1)使用自动布局,UILabel的高度具有> = 0约束 . 宽度是固定的 . 2)将文本分配到UILabel,UILabel在那时已经有一个超级视图(不确定它是多么重要) . 3)然后做:
现在可以适当地设置标签的高度 .
适合每次! :)
你可以显示一行输出然后设置属性 Line=0 并显示多行输出然后设置属性 Line=1 and more
还有这种方法: