2012-06-08 82 views
6

我有涉及UILabelsizeToFit方法的问题:的UILabel大小以适合

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],那么它将显示,但它只显示一半的数据。

感谢和问候。

+0

你为什么要将行数设置为0静态?相反,您可以使用CGRectZero进行初始化,使用字体大小来计算宽度或高度或两者。 – Tarun

+0

感谢您的回复。你可以清楚地说明上面的句子 – fayaz

+1

嗯,我知道我迟到了,但也许这有助于:'sizeToFit'不能与'UILabel'一起使用多行。你可以使用'UITextView',但你必须确保文本视图的大小比需要的大。像这样:设置视图的高度='MAXFLOAT',然后调用'sizeToFit'。如果你想保留一个标签,你需要使用'sizeWithFont:constrainedToSize:lineBreakMode:'方法。希望这可以帮助。干杯! – George

回答

-1

只要确保您增加标签的行数。取而代之的

questionLable.numberOfLines = 0;化妆用的

questionLable.numberOfLines = 4; 因为它会迫使系统计算最小宽度可能4行。

你可以,如果它有助于通过XIB文件也做到这一点..

+0

问题是我无法看到数据。如果我写[questionLable sizeToFit] – fayaz

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); 

检查。

+0

这不再适用于ios 8,因为此方法已被弃用 – chandhooguy

+0

使用NSLineBreakByWordWrapping而不是已弃用的UILineBreakModeWordWrap! :) – MasterRazer

+0

sizeWithFont:现已弃用 - 所以这不再是正确的 – AppHandwerker

0

我在Google上搜索了上述问题,发现sizeToFit似乎是一个bug,它已经被苹果报告过。 因此,作为一种变通方法ü可以使用此代码:

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]; 
+0

感谢您保持努力,但仍然存在相同的问题 – fayaz

2

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

2

我发现,如果自动版式为真,则大小以适合不行

+0

这很棒,其工作 – Vishal

0

我发现,使用sizeToFit有一个UILabel时,InterfaceBuilder下您需要将自动收缩属性从“固定字体大小”到“改变最小字体大小“。我通常会将其值设为0.5以确保其正常工作。