У меня есть табличное представление с настраиваемой ячейкой в нем, в моей ячейке у меня есть одна метка и одно изображение, текст в ярлыке длинный, поэтому я просто покажите первые 2 строки, а затем покажите 3dots «...», используя разрывы строк, а затем, когда пользователь коснется ячейки, он будет расширяться, чтобы отобразить полный текст метки. . Я меняю высоту ячейки при записи на нее. Я делаю это вот так:Как показать полный текст метки в ячейке при изменении высоты
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([tableView indexPathsForSelectedRows].count) {
if ([[tableView indexPathsForSelectedRows] indexOfObject:indexPath] != NSNotFound) {
MsgInfo *info = [_msgInfos objectAtIndex:indexPath.row];
NSString *displayString = info.msg;
CGRect boundingRect =
[displayString boundingRectWithSize:CGSizeMake(self.tableView.frame.size.width - 2 * 10, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:
@{ NSFontAttributeName : [UIFont fontWithName:@"B Yekan" size:18.0f]} context:nil];
CGFloat rowHeight = ceilf(boundingRect.size.height);
NSLog(@"Height = %f for '%@'", rowHeight, displayString);
return 54 + rowHeight + 2 * 10; // Expanded height
}
return 92; // Normal height
}
return 92; // Normal height
}
Так что, когда я нажимаю клетку, он расширяется на основе моего текста шрифт и размер этикетки,
Но теперь я хочу, чтобы показать полный текст этикетки, я знаю, что я должен установить label.numberofline = 0 в didSelectRowAtIndexPath, но это не работает.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MsgCell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
UILabel *nameLabel = (UILabel *)[cell viewWithTag:100];
nameLabel.numberOfLines =0;
[nameLabel sizeToFit];
[nameLabel setLineBreakMode:NSLineBreakByWordWrapping];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
любая помощь?
вы не должны делать [[tableView indexPathsForSelectedRows] indexOfObject: indexPath], потому что indexPath является вновь созданным объектом и может отсутствовать в массиве selectedIndexPath. – santhu