我正在尝试在UITableViewCell
中添加一个可以跨越两行的标签,但如果只有一行将其垂直对齐到第一行。
计算标签高度(下面)的代码似乎有效,但标签没有重新加入/重新绘制。如果我将单元格从视图中滚动并再次返回,则标签的高度正确。
我已尝试[cell setNeedsLayout]
,[cell setNeedsDisplay
],[titleLabel setNeedsLayout]
和[titleLabel setNeedsLayout
,但没有任何组合有效。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ItemCell" forIndexPath:indexPath];
Item *item = (self.items)[indexPath.section][indexPath.row];
UILabel *titleLabel = (UILabel *)[cell viewWithTag:100];
titleLabel.text = item.title;
titleLabel.backgroundColor = [UIColor redColor];
// Some titles span two lines, so resize to fit the new content.
CGRect textRect = [titleLabel.attributedText boundingRectWithSize:CGSizeMake(titleLabel.frame.size.width, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];
CGRect labelRect = CGRectIntegral(CGRectMake(titleLabel.frame.origin.x,
titleLabel.frame.origin.y,
titleLabel.frame.size.width,
textRect.size.height));
NSLog(@"%@, %f", titleLabel.text, labelRect.size.height); // This logs out the correct height
titleLabel.frame = labelRect;
return cell;
}
答案 0 :(得分:0)
请试试我的建议。也许它可以帮助你在UITableview中重复使用单元格。请检查您的代码中的以下几点:
在iPhone中重绘UITableView时,如果你单元格== nil怎么办。这就是为什么你必须为UITableViewCell的可重用性做出类似下面的条件。
// Get table View Cell
static NSString *CellIdentifier = @"ItemCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib;
nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (UITableViewCell *) [nib objectAtIndex:0];
}
请测试并告诉我。
答案 1 :(得分:0)
原来我正在使用自动布局,这意味着我无法直接设置框架。相反,我需要添加一个高度约束并将其连接到IBOutlet
子类上的UITableViewCell
。