Переменная UITableCellView height с подвидом
-
02-07-2019 - |
Вопрос
Я хочу создать UITableView с различной высотой строк, и я пытаюсь достичь этого, создавая UILabels внутри UITableViewCells.
Вот мой код на данный момент:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"EntryCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 300, 40)];
textView.numberOfLines = 0;
textView.text = [entries objectAtIndex:[indexPath row]];
[cell.contentView addSubview:textView];
[textView release];
return cell;
}
Это дает мне 2 строки текста на ячейку.Однако каждая "запись" имеет разное количество строк, и я хочу, чтобы UITableViewCells автоматически изменял размер, перенося текст по мере необходимости, без изменения размера шрифта.
[textView sizeToFit]
и/или [cell sizeToFit]
похоже, это не работает.
Вот как я хочу, чтобы UITableView выглядел:
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
Lorem ipsum
----------------
Lorem ipsum
----------------
Lorem ipsum
Lorem ipsum
----------------
Кто-нибудь знает, как это сделать правильно?
Спасибо.
Решение
UITableViewDelegate определяет необязательный метод heightForRowAtIndexPath, который поможет вам начать.Затем вам нужно использовать sizeWithFont.
Здесь есть некоторое обсуждение вашей конкретной проблемы:
http://www.v2ex.com/2008/09/18/how-to-make-uitableviewcell-have-variable-height/
Размер текста также обсуждался в этот поток
Другие советы
Этот код работает у меня.Не знаю, идеально ли это, но работает.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row<[notesModel numberOfNotes]){
NSString *cellText = [@"Your text..."];
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:12.0];
CGSize constraintSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 100, MAXFLOAT);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
return labelSize.height + 20;
}
else {
return 20;
}
}
TextView.numberOfLines = 2?numberOfLines устанавливает максимальное количество строк, так что, может быть, 2 будет работать для u?