6

我有一个涉及UILabel'ssizeToFit方法的问题:

UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,320)];
questionLabel.lineBreakMode = UILineBreakModeWordWrap;
questionLabel.backgroundColor=[UIColor clearColor];
questionLabel.textAlignment=UITextAlignmentLeft;
questionLabel.textColor=[UIColor blackColor];
questionLabel.tag=1;
questionLabel.font=[UIFont systemFontOfSize:13];
questionLabel.numberOfLines = 0;
[questionLabel sizeToFit];
[myView addSubview:questionLabel];

我编写了这段代码来显示我的数据。但是如果我写:[questionLabel sizeToFit]我的数据显示不正确。如果我删除[questionLabel sizeToFit]它,它会显示,但它只显示一半的数据。

谢谢并恭祝安康。

4

6 回答 6

16
NSString *yourString = @"write your label text here";
CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
questionLabel.frame = CGRectMake(0, 0, s.width, s.height);

检查它是否有帮助。

于 2012-06-08T06:51:20.097 回答
2

我认为最好使用 taus-iDeveloper 答案来计算标签的大小。
我只想说您的代码不起作用的原因是因为您没有为 UILabel 设置文本,因此 sizeToFit 返回 CGSizeZero (因此它不会出现在屏幕上)。您必须在使用 sizeToFit 之前设置文本。

于 2012-09-17T20:11:19.937 回答
2

我发现如果 AutoLayout 处于打开状态,则适合的尺寸不起作用

于 2014-05-09T09:18:35.630 回答
0

我发现在将 sizeToFit 与 UILabel 一起使用时,在 InterfaceBuilder 中,您需要将 Autoshrink 属性从“固定字体大小”更改为“最小字体大小”。然后我通常将其值设置为 0.5 以确保其正常工作。

于 2015-02-13T20:54:33.013 回答
0

我用谷歌搜索了上面的问题,发现了一些关于 sizeToFit 似乎是一个错误的信息,并且已经向苹果报告了。因此,作为一种解决方法,您可以使用以下代码:

NSString * myText = [NSString stringWithString:@"some text"];

CGFloat constrainedSize = 265.0f;

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; 

CGSize textSize = [myText sizeWithFont: myFont
                       constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX)
                           lineBreakMode:UILineBreakModeWordWrap];



CGRect labelFrame = CGRectMake (0, 0, textSize.width, textSize.height);

UILabel *label = [[UILabel alloc] initWithFrame:labelFrame];

[label setFont:myFont];

[label setText:myText];
于 2012-06-08T07:25:31.703 回答
-1

只需确保增加标签的行数即可。代替

questionLable.numberOfLines = 0;利用

questionLable.numberOfLines = 4; 因为它将强制系统计算 4 行可能的最小宽度。

您也可以通过 Xib 文件实现此目的..

于 2012-06-08T06:38:19.323 回答