我正在尝试创建一个表格视图,其中单元格的高度是动态的。
到目前为止,我设法根据我在里面添加的自定义UILabel来设置单元格的高度。
使用常规的cell.textLabel它可以正常工作,但是当我使用自己的标签时出错了。我只看到标签的一半,但是当我向上和向下滚动时,有时标签会延伸并显示所有文本......您可以看到标签应该在图像中结束的位置。
这是cellForRowAtIndexPath
:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell.
Car *carForCell = [cars objectAtIndex:indexPath.row];
UILabel *nameLabel = [[UILabel alloc] init];
nameLabel = (UILabel *)[cell viewWithTag:100];
nameLabel.numberOfLines = 0;
nameLabel.text = carForCell.directions;
[nameLabel sizeToFit];
[nameLabel setBackgroundColor:[UIColor greenColor]];
return cell;
答案 0 :(得分:1)
除非您发布的代码中存在拼写错误,否则您似乎根本不会将标签添加到单元格中。您似乎每次都要创建一个新标签,然后用单元格的视图(始终为零)替换nameLabel
指针的内容。
首先尝试这样做,然后看看它的外观:
static NSString *CellIdentifier = @"Cell";
UILabel *nameLabel;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
nameLabel = [[UILabel alloc] init];
nameLabel.tag = 100;
nameLabel.numberOfLines = 0;
[nameLabel setBackgroundColor:[UIColor greenColor]];
[cell.contentView addSubview:nameLabel];
}
else {
nameLabel = (UILabel *)[cell viewWithTag:100];
}
// Configure the cell.
Car *carForCell = [cars objectAtIndex:indexPath.row];
nameLabel.text = carForCell.directions;
[nameLabel sizeToFit];
return cell;
您还需要使用tableView:heightForRowAtIndexPath:
委托方法告诉tableView每个单元格需要的大小。这意味着要再次获取相关的Car
对象并使用sizeWithFont:sizeWithFont:forWidth:lineBreakMode:
答案 1 :(得分:0)
你如何设定细胞的高度?它应该在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
答案 2 :(得分:0)
您应该使用以下方法计算并返回UITableViewCell的高度:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
在这里,您应该初步计算您的细胞应该有多高。
例如:
CGSize textSize = [myString sizeWithFont:[UIFont systemFontOfSize:16] constrainedToSize:CGSizeMake(320, 9999)];
return textSize.height;