8

大家好,我有问题,我用withtableview制作 Cell,然后计算Height 以设置单元格 Height 一切正常,除非我滚动我的文本变得奇怪,就像每行一个字符:uilabelSizeToFitUILabeltableView

我的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 之后:

第二张截图

任何帮助???

4

5 回答 5

20

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

您的其中一个标签的内容非常短(例如,在带有单词“jio”的第 4 个单元格中)被调整大小,sizeToFit结果宽度小于您想要的原始宽度。

之后,表格视图重用单元格并且sizeToFit仍然尊重从先前调用计算的小宽度sizeToFit

解决方案:

1)在每次调用之前将框架的宽度设置为您原来的预期标签宽度sizeToFit

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

2)使用您的行高计算并设置框架高度。无需使用sizeToFit.

于 2013-06-05T22:42:30.447 回答
1

你可能应该对你的单元进行子类化并清理 UILabel

 override func prepareForReuse() {
    super.prepareForReuse()
    self.label.text = nil
}
于 2017-02-23T09:02:44.787 回答
0
于 2014-11-18T11:43:23.413 回答
0

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

首选宽度

于 2017-12-07T06:44:44.013 回答
0

如果您不使用自动布局,也可以通过在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))
于 2016-01-21T10:11:32.867 回答