我创建了一个UITableViewCell
的子类,其中包含UITextView
。设置UITextView
中的文本后,它会自动调整大小以使高度增加但宽度保持不变。
我现在想要使用下面显示的方法根据其中UITableViewCell
的高度动态设置每个UITextView
的高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Some code to pull in the subclassed UITableViewCell & set
// the height based on the UITextView within it.
}
有人可以建议如何/如果可能的话?要清楚这是让我的自定义单元从这个方法导致我的问题,显然我可以施展它,但这对我来说似乎不对。有人可以建议如何做到这一点吗?
答案 0 :(得分:1)
创建具有正确宽度的UITextView,然后在textview上设置文本。
致电[textview sizeToFit]
。从textview获取高度,然后添加你需要的任何额外高度等同于它在UITableViewCell子类中的高度。
使用NSString的sizeWithFont:constrainedToSize:lineBreakMode:
会很不错,但根据我的经验,这通常会在不同的地方打破字符串,而不是相同大小的UITextView,所以它不可靠。您的文本在UITextView中通常需要比NSString sizeWithFont:constrainedToSize:lineBreakMode:
建议的更多或更少的行。
答案 1 :(得分:1)
每次UITextView
内容更改时,都需要重新计算并更新相关的单元格高度。您不能只设置新的单元格高度,tableView
应该通过调用其委托方法tableView:heightForRowAtIndexPath:
来询问它。要强制tableView
重新计算其单元格大小,请调用空[tableView beginUpdates]
/ [tableView endUpdates]
块。
我的TableKit库中有一个ReminderSample演示,可以显示此功能。
答案 2 :(得分:0)
这是一个真实世界的例子。在这个应用程序中,只调整第三部分中的单个单元格,如果您想要调整任何单元格的大小,您应该在NSMutableDictionary中保存大小(在我的示例descriptionLableSize中)并在tableView:cellForIndexPath:
中使用它
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *description = [self.modelObject valueForKey:@"descriptionText"];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
//if needed save the size in a dictionary for each indexPath
descriptionLableSize = [description sizeWithFont:[UIFont fontWithName:@"Helvetica" size:17] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
if (indexPath.section == 2){
NSUInteger h = descriptionLableSize.height + 20;
h = (h < 44) ? 44:h;
return h;
}
return 44.0;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//....
if (section == 2) {
NSString *description = [self.modelObject valueForKey:@"descriptionText"];
cell.textLabel.text = description;
[cell.textLabel setNumberOfLines:0];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}