it-swarm.com.ru

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

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

У меня есть 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.

8
Jacek Kwiecień

Используйте предложенный в документации метод:

- (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));
55
Numeral

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

Вы можете использовать этот простой метод:

который вернет количество строк

- (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];
1
Sarat Patel
     let l = UILabel()

        l.numberOfLines = 0


        l.layer.frame.size.width = self.view.frame.width - 40 /*(Padding 20 + 20)*/
        l.font = UIFont(name: "BwModelica-Bold", size: 16.0)

        l.text = "Your Any length Text!!"

        let noOfLines = ceil(l.intrinsicContentSize.width) / l.frame.width

        let lbl_height = noOfLines * l.intrinsicContentSize.height

Это будет ваша Точная динамическая высота метки. Удачного кодирования !!!

0
onkar dhanlobhe