我遇到涉及UILabel
的{{1}}方法的问题:
sizeToFit
我写了这段代码来显示我的数据。但如果我写: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]
,那么它正在显示,但它只显示一半的数据。
谢谢和问候。
答案 0 :(得分: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);
检查是否有帮助。
答案 1 :(得分:2)
我认为最好使用taus-iDeveloper的答案来计算标签的大小 我只是想说你的代码不起作用的原因是因为你没有将文本设置为你的UILabel所以sizeToFit返回CGSizeZero(因此它不会出现在屏幕上)。您必须在使用sizeToFit之前设置文本。
答案 2 :(得分:2)
我发现如果启用了AutoLayout,则尺寸不适合
答案 3 :(得分:0)
我用谷歌搜索了上面的问题并且发现了一些信息,即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];
答案 4 :(得分:0)
我发现在使用带有UILabel的sizeToFit时,在InterfaceBuilder中需要将Autoshrink属性从“Fixed Font Size”更改为“Minimum Font Size”。我通常会将其值设置为0.5,以确保其正常工作。
答案 5 :(得分:-1)
确保增加标签的行数。而不是
questionLable.numberOfLines = 0;
使用
questionLable.numberOfLines = 4;
因为它会迫使系统计算4行可能的最小宽度。
您也可以通过Xib文件实现此目的..