Вычисление числа строк динамического UILabel (iOS7)

Есть много решений для этого вопроса arround, но не может найти ненужный .

У меня есть UILabel с режимом WordWrap и фиксированной шириной, скажем, 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); 

Выходной параметр height всегда равен 20 (так что это похоже на одну строку), а текст – как 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)); 

У меня возникли проблемы с использованием boundingRectWithSize непосредственно в моем атрибуте атрибута UILabel – он не учитывал перенос на несколько строк (возвращаемая высота всегда была 17,5). Чтобы обойти это, мне пришлось использовать boundingRectWithSize в свойстве текста UILabel и передавать в словаре атрибутов отдельно (а не через [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 устарел, теперь вы можете использовать это

 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]; 
  • Многострочный / динамический UILabel Truncating в iOS8
  • Обрезание UILabel при настройкеFontSizeToFitWidth
  • Изменение текста UILabel задерживается, но почему?
  • Как проверить, был ли затронут текст UILabel?
  • Устройство распознавания жестов не работает по какой-либо причине, на iphone
  • UIStackView и усеченные многострочные UILabels
  • Как сделать якорь HTML в качестве ссылки для кликов в TTTAttributedLabel?
  • Как сделать CustomLink привлекательным в OHAttributedLabel
  • UICollectionView cell.ViewWithTag возвращает nil для UILabel
  • iOS автоматически регулирует высоту ярлыка
  • Изменить ярлык с другого вида
  • Давайте будем гением компьютера.