当文字走多行时,如何获得标签的高度

时间:2013-08-08 10:02:28

标签: iphone ios objective-c uilabel

我在表格单元格的详细视图中以编程方式创建标签。我正在相应地设置文本并为其设置标签高度。这是我的代码:

NSString *mytitleString = [discussionData valueForKey:@"Name"];
 CGSize size =  [mytitleString sizeWithFont:[UIFont systemFontOfSize:14.0]  constrainedToSize:CGSizeMake(500, CGFLOAT_MAX)];
 float lbltitleheight = size.height;
 lbltitle.text = mytitleString;

但问题是如果它是多行,我无法设置标签的高度。我如何实现这一目标?

9 个答案:

答案 0 :(得分:2)

您也可以使用

label.numberOfLines = 0; // allows label to have as many lines as needed
label.text = @"some long text";
[label sizeToFit];
NSLog(@"Label's frame is: %@", NSStringFromCGRect(label.frame));

尺寸将相应调整。

或者您只需要增加UILabel 动态的高度。 sizeWithFont constrainedToSize:lineBreakMode:是要使用的方法。

//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;

答案 1 :(得分:2)

为什么你不能设置标签大小? 您是否尝试将标签设置为多行:

NSString *mytitleString = [discussionData valueForKey:@"Name"];
CGSize size =  [mytitleString sizeWithFont:[UIFont systemFontOfSize:14.0]  
                         constrainedToSize:CGSizeMake(500, CGFLOAT_MAX) 
                             lineBreakMode:lbltitle.lineBreakMode];
lbltitle.frame = (CGRect){.oririn = lbltitle.frame.origin, .size = size};
lbltitle.numberOfLines = 0;
lbltitle.text = mytitleString;

我还建议不要使用方法sizeToFit,因为当您多次调用时 - 标签可能会变得太窄。

答案 2 :(得分:2)

请试试这个:

CGFloat height=[mytitleString sizeWithFont:[UIFont fontWithName:@"Arial" size:14] constrainedToSize:CGSizeMake(500, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap].height;

希望这会对你有所帮助。

答案 3 :(得分:1)

您的代码是正确的,但您需要设置numberOfLines为0.因为它是1默认值。

lbltitle.numberOfLines = 0;

答案 4 :(得分:1)

你可以试试这个

 lbltitle.text = mytitleString;
 lbltitle.numberOfLines=0;
    [lbltitle sizeToFit];

答案 5 :(得分:1)

试试这个:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 34.0)];
[label setBackgroundColor:[UIColor clearColor]];
[label setNumberOfLines:0];
label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 10.0;
[label setTextColor:[UIColor blackColor]];
[label setFont:[UIFont fontWithName:@"YourFont" size:15]];
[label setTextAlignment:UITextAlignmentCenter];
[label setText:yourText];

答案 6 :(得分:1)

CGRect rect_mission = CGRectMake(0, stringSize.height + stringSize_award.height+ 190, 280, stringSize_mission.height+60);

答案 7 :(得分:1)

您的代码应该可以正常运行。 尝试更改标签的numberOfLines并将其设置为可以扩展的最大数量。

答案 8 :(得分:1)

    CGFloat height=[yourlable sizeWithFont:[UIFont fontWithName:@"Arial" size:31] constrainedToSize:CGSizeMake(yourlable.frame.size.width,1000) lineBreakMode:UILineBreakModeWordWrap].height; 

并获得标签的动态高度。