我有一个带有自定义单元格的tableview,在我的单元格中,我有一个标签和一个图像,标签中的文字很长,所以我只显示前两行,然后显示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
}
因此,当我点按一个单元格时,它会根据我的标签文字字体和大小进行扩展,
但是现在我想显示标签的全文,我知道我必须在didSelectRowAtIndexPath中设置label.numberofline = 0,但它不起作用。
- (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];
}
任何帮助?
答案 0 :(得分:1)
在didSelectRowAtIndexPath
中,您正在创建一个新单元格并更改其设置(不会编辑现有单元格,也不会编辑任何将用于显示的单元格)。您应该做的是触发所选单元格的重新加载,以便重新计算新高度并重新加载单元格。在tableView:cellForRowAtIndexPath:
中,您应该有类似的逻辑来检查是否选中了行,然后设置标签上的行数。
在tableView:cellForRowAtIndexPath:
中执行此操作也可以防止您在取消选择时遇到问题,因为每次重复使用时,您必须始终设置每个单元格的行数。