当使用以下代码重新调整表格行的大小时,无论有多少行,最后一行文本总是被截止。但是增加了空白区域,看起来有足够的空间用于文本。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
CGFloat restOfTheCellHeight = tableView.rowHeight - cell.detailTextLabel.frame.size.height;
CGSize constrainedSize = CGSizeMake(cell.detailTextLabel.frame.size.width, CGFLOAT_MAX);
CGSize textHeight = [cell.detailTextLabel.text sizeWithFont:cell.detailTextLabel.font constrainedToSize:constrainedSize lineBreakMode:cell.detailTextLabel.lineBreakMode];
CGFloat newCellHeight = (textHeight.height + restOfTheCellHeight);
if (tableView.rowHeight > newCellHeight) {
newCellHeight = tableView.rowHeight;
}
return newCellHeight;
}
以下是cellForRowAtIndexPath中的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomCellTableRowTypeSingleLineValueSmallLabel *cell = (CustomCellTableRowTypeSingleLineValueSmallLabel *)[tableView dequeueReusableCellWithIdentifier:@"CellTypeMultiLineLabelInCellSmallCell"];
if (cell == nil) {
NSArray *xibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCellTableRowTypeSingleLine" owner:nil options:nil];
for(id currentObject in xibObjects) {
if([currentObject isKindOfClass:[CustomCellTableRowTypeSingleLineValueSmallLabel class]]){
cell = (CustomCellTableRowTypeSingleLineValueSmallLabel *)currentObject;
}
}
cell.accessoryType = UITableViewCellAccessoryNone;
cell.editingAccessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.detailTextLabel.numberOfLines = 0;
cell.detailTextLabel.text = self.attributeStringValue;
cell.textLabel.text = self.rowLabel;
return cell;
}
有什么想法吗?
答案 0 :(得分:0)
您需要调用[cell.detailTextLabel sizeToFit]
才能使标签在cellForRowAtIndexPath中实际调整大小。它不会因为您将numberOfLines设置为0而自行调整大小。有关更多说明,请参阅this question and read its answers。
答案 1 :(得分:0)
您正在heightForRowAtIndexPAth方法中正确计算单元格高度,但是在您的cellForRowAtIndexPath方法中,您实际上从未使用它来设置标签内的高度。
因此,表根据您的heightForRowAtIndexPath分配了适当的空间量,但随后将从cellForRowAtIndexPath返回的未提取的单元格插入该空间。我认为这可能是问题的原因,并会解释你所看到的结果。
在cellForRowAtIndexPath中,您需要使用相同的计算实际设置标签的高度。
即
CGSize constrainedSize = CGSizeMake(cell.detailTextLabel.frame.size.width, CGFLOAT_MAX);
CGRect cframe = cell.detailTextLabel.frame;
cframe.size.height = constrainedSize.height;
cell.detailTextLabel.frame = cframe;
您可能还需要实际设置内容视图框架(不确定它如何与非自定义单元格一起使用)。
我也不确定从heightForRowAtIndexPath方法调用cellForRowAtIndexPath是个好主意(直接访问直接访问用于大小计算的文本数据可能会更好。)
答案 2 :(得分:0)
结果我只需要在界面构建器中为标签启用所有自动调整大小选项。