大家好我的tableview
有问题,我用uilabel
SizeToFit
制作单元格,然后计算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之后:
任何帮助???
答案 0 :(得分:20)
方法sizeToFit
尊重框架的宽度并调整height
。并且表视图单元重用单元。将这两种行为结合起来可能会导致您所描述的问题。
您的标签内容非常短(例如,在第4个单元格中标有“jio”的单元格),其大小调整为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
。
答案 1 :(得分:1)
您应该将您的单元格子类化并清理
上的UILabel override func prepareForReuse() {
super.prepareForReuse()
self.label.text = nil
}
答案 2 :(得分:0)
这可能有所帮助 http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/
@Verbumdei提供的参考和解决方案的方法就在附近。
答案 3 :(得分: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))
答案 4 :(得分:0)
您可以设置label的首选Width属性。这对我有用