Вы можете сделать это без подклассов UITableViewCell
.
В методе tableView:cellForRowAtIndexPath:
создайте базовый UITableViewCell
и измените свойства UILabel
, содержащиеся в этой ячейке. Измените максимальное количество строк, чтобы вместить больше текста в ячейку.
К сожалению, метка ячейки недоступна для свойств, поэтому вам нужно получить ее с помощью свойства subviews
.
Конечно, здесь используются подробности реализации UITableViewCell
, так что это может нарушить будущие выпуски SDK. Используйте с осторожностью.
Вот пример:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellId"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"YourCellId"] autorelease];
cell.font = [UIFont systemFontOfSize:16];
UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0];
[cellLabel setNumberOfLines:3];
}
cell.text = @"Your text";
return cell;
}
Обновление:
Чтобы установить высоту строки по размеру текста, вы можете сделать следующее:
1. Установите высоту ячейки, чтобы соответствовать тексту.
Вам нужно что-то вроде этого:
CGSize textSize = [text sizeWithFont:font
constrainedToSize:CGSizeMake(313, 1000)
lineBreakMode:UILineBreakModeWordWrap];
cell.frame = CGRectMake(0.0f, 0.0f, 320.0, textSize.height);
2. Вернуть высоту ячейки в методе tableView:heightForRowAtIndexPath:
.
Например, вот так:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell* cell = [self tableView:(UITableView*)self.view cellForRowAtIndexPath:indexPath];
CGRect cellFrame = cell.frame;
return cellFrame.size.height;
}