Количество строк в UILabel - PullRequest
       4

Количество строк в UILabel

2 голосов
/ 27 ноября 2011

У меня есть UITableView с пользовательскими ячейками, которые содержат метки. Я использую это, чтобы показать комментарии, и у этого должна быть гибкая высота. Как мне это сделать? У меня есть код, который подсчитывает количество строк с помощью длины uilabel.text, но это неверный путь. У тебя есть идеи?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2011

Используйте UILabel с numberOfLines, установленным в ноль.

Затем, чтобы убедиться, что ваша метка действительно вписывается в ячейку, получите размеры из расширения NSString UIKit следующим образом:

CGFloat cellWidth = 320.0f; //example width....
labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(cellWidth, FLT_MAX)];

Из ссылки на NSString;sizeWithFont: constrainedToSize:

Возвращает размер строки, если она была обработана и ограничена указанным размером.

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size

Параметры font Шрифт дляиспользовать для вычисления размера строки.размер Максимально допустимый размер строки.Это значение используется для расчета места разрыва строки и переноса.Возвращаемое значение Ширина и высота ограничивающего прямоугольника результирующей строки.

0 голосов
/ 27 ноября 2011

Создать метод класса класса ячейки комментария, который вычисляет высоту текста, необходимую для высоты ячейки. Также создайте метод класса, который возвращает шрифт по умолчанию для ячейки, чтобы вы всегда могли вычислить правильную высоту ячейки в layoutSubviews ячейки и в cellHeightForRowAtIndexPath методах UITableViewDelegate.

, например

+(UIFont *) defaultCommentFont {
    return [UIFont italicSystemFontOfSize:13];
}

+(CGSize) sizeOfComment:(NSString *)commentText maxWidth:(CGFloat)maxWidth {
    return [commentText sizeWithFont:[[self class] defaultCommentFont] constrainedToSize:CGSizeMake(maxWidth, MAX_FLOAT)];
}

- (void)layoutSubviews {
    [super layoutSubviews];

    static CGFloat margin = <# margin #>;

    CGSize commentSize = [[self class] sizeOfComment:self.commentText maxWidth:self.contentView.frame.size.width - 2 * margin];

    self.commentLabel.frame = CGRectMake(margin, margin, commentSize.width, commentSize.height);
}

( извините, если в коде есть ошибки - используется только глазной парсер;) )

Имея это, при попытке вернуть правильную высоту ячейки в методе UITableViewDelegate, вам не нужно использовать метод cellForRowAtIndexPath:, потому что это, в некоторых случаях, может вызвать неконтролируемую рекурсию, приводящую к переполнению стека.

И, как сказал Тилл, установите для свойства метки комментария numberOfLines значение 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...