UILabel
внутри UITableViewCell
.При нажатии на ячейку высота увеличивается, и появляется секунда UILabel
с различными объемами данных.
Проблема заключается в том, что при переносе строки sizeWithFont:constrainedToSize:lineBreakMode:
не возвращает правильную высоту и обрезает нижнюю строку.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
labelExpanded = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
labelExpanded.font = [UIFont boldSystemFontOfSize:11];
labelExpanded.textAlignment = UITextAlignmentLeft;
labelExpanded.lineBreakMode = UILineBreakModeWordWrap;
labelExpanded.numberOfLines = 0;
[cell.contentView addSubview:labelExpanded];
CGSize constraint = CGSizeMake(300, 20000);
CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
[labelExpanded setText:expandedDetails];
[labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(// Row is Expanded)
{
CGSize constraint = CGSizeMake(300, 20000);
CGSize size = [sameTextAsLabel sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
// I found +8 to height added nice padding
CGFloat height = size.height + 8;
}
else // Row is not expanded
return 30;
}
Один и тот же текст подается в оба, он состоит из строки с несколькими новыми строками \n
.Если строка длиннее ширины, перенос слов выполняет свою работу, но при вычислении ее динамической высоты он не включает в себя перенесенную строку.
Если я добавлю любое значение к [labelExpanded setFrame:height]
, например [size.height + 30]
myобернутая линия обнаруживается.Однако, если строка не обернута, это добавляет ненужные пробелы.
Я не смог найти решение онлайн для этого.