Создать метод класса класса ячейки комментария, который вычисляет высоту текста, необходимую для высоты ячейки. Также создайте метод класса, который возвращает шрифт по умолчанию для ячейки, чтобы вы всегда могли вычислить правильную высоту ячейки в 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
.