UITableView与UILabel SizeToFit滚动时弄乱

大家好,我有我的问题与我的tableview ,我使用uilabelSizeToFit单元格,然后计算UILabel高度设置单元格高度一切工作,除非当我滚动我的表tableView文本得到奇怪像每行一个字符:

我的TableViewVell方法是:

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } UILabel *label = (UILabel *)[cell viewWithTag:1]; label.text = [someArray objectAtIndex:indexPath.row]; // Set the UILabel to fit my text; messageLabel.lineBreakMode = UILineBreakModeWordWrap; messageLabel.numberOfLines = 0; [messageLabel sizeToFit]; return cell; } 

单元格高度保持在正确的大小只有UILabel的问题…这是我加载视图的结果:

第一个截图

这是我开始滚动TableView后:

第二个截图

任何帮助?

你应该inheritance你的单元格并清理UILabel

  override func prepareForReuse() { super.prepareForReuse() self.label.text = nil } 

方法sizeToFit尊重框架的宽度并调整height 。 表格视图单元格重用单元格。 结合这两种行为可能会导致你所描述的问题。

其中一个内容非常短的标签(例如第四个单元格中带有“jio”的单元格)将使用sizeToFit调整,结果的宽度比您想要的原始宽度小。

之后,表视图重用单元格, sizeToFit仍然尊重以前调用sizeToFit计算的小宽度。

解决scheme:

1)在调用sizeToFit之前,每次将帧的宽度设置为原始的预定标签宽度:

 CGRect frame = messageLabel.frame; frame.size.width = 100.0; //you need to adjust this value messageLabel.frame = frame; 

2)使用你的行高计算,并设置框架高度。 不需要使用sizeToFit

如果你没有使用autolayout,这也可以通过在UIView上添加一个类来解决

 public func sizeToFit(constrainedSize: CGSize) -> CGSize { var newSize = sizeThatFits(constrainedSize) newSize.width = min(newSize.width, constrainedSize.width) newSize.height = min(newSize.height, constrainedSize.height) self.size = newSize return newSize } 

这个想法是使用sizeThatFits与一个约束的大小,以确定所采用的大小,然后使用最小预期的宽度/高度。

那么你只需要做类似的事情

 yourLabel.sizeToFit(self.contentView.size) // or yourLabel.sizeToFit(CGSize(width: maxWidth, height: self.contentView.size.height)) 

您可以设置标签的首选宽度属性。 这对我有效

首选宽度