计算dynamicUILabel(iOS7)的行数

这个问题有很多解决scheme,但找不到不被弃用的问题。

我有一个模式WordWrap UMLabel和固定的宽度,比方说250.行被设置为0。

这是我试过的:

 UILabel *contentLabel = (UILabel*)[contentView viewWithTag:10]; CGSize size = [contentLabel.text sizeWithFont:contentLabel.font forWidth:contentLabel.frame.size.width lineBreakMode:NSLineBreakByWordWrapping]; NSLog(@"Label's height is: %d", size.height); 

高度参数的输出总是20(所以就像一条线),而te文本是30条线。

我需要为UIScrollView的目的。

使用文档中提示的方法:

 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0); 

例如

  CGSize maxSize = CGSizeMake(self.label.frame.size.width, MAXFLOAT); CGRect labelRect = [self.label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.label.font} context:nil]; NSLog(@"size %@", NSStringFromCGSize(labelRect.size)); 

我直接在我的UILabel的属性文本上使用boundingRectWithSize时遇到了麻烦 – 它没有考虑到多行换行,(返回的高度始终是17.5)。 要解决这个问题,我必须在UILabel的text属性上使用boundingRectWithSize,并分别传递属性字典(而不是通过[self.myLabel.attributedText attributesAtIndex:0 effectiveRange:nil] )。

 CGRect labelSize = CGRectIntegral([self.myLabel.text boundingRectWithSize:CGSizeMake(self.myLabel.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.myLabel.font, NSParagraphStyleAttributeName:paragraphStyle} context:nil]); 

你可以使用这个简单的方法:

这将返回行数

 - (int)lineCountForLabel:(UILabel *)label { CGFloat labelWidth = label.frame.size.width; int lineCount = 0; CGSize textSize = CGSizeMake(labelWidth, MAXFLOAT); long rHeight = lroundf([label sizeThatFits:textSize].height); long charSize = lroundf(label.font.leading); lineCount = (int)( rHeight / charSize ); return lineCount; } 

通过呼叫

 [self lineCountForLabel:YOUR_LABEL]; 

UILineBreakModeWordWrap是deprecreated,现在你可以使用这个

 CGSize nameSize = [content sizeWithFont:[UIFont fontWithName:@"verdana" size:bigFontSize] constrainedToSize:CGSizeMake(labelWidth, labelHeight) lineBreakMode:NSLineBreakByWordWrapping]; NSLog(@"width = %f, height = %f", nameSize.width, nameSize.height); 

试试这个

 //Here tweetText is an object of NSString and assign a text to it NSString *tweetText = tweet.tweetText; CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); CGSize size = [tweetText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:NSLineBreakByWordWrapping]; //detailLabel is an object of UILabel [detailLabel setText:tweetText]; //Set frame [detailLabel setFrame:CGRectMake(76,20,280, MAX(size.height, 30.0f))]; 

这里是我正在使用的方法:

 CGSize maximumSize = CGSizeMake(contentLabel.frame.size.width, 9999); CGSize myStringSize = [eventName sizeWithFont:contentLabel.font constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap];