根据单元格宽度更改UITableViewCell内容的首选方法

时间:2014-12-30 22:49:03

标签: ios objective-c uitableview ios8 autolayout

我有一个动态自定义UITableViewCell,它利用了自动布局。

我根据单元格的宽度改变标签的文本内容。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    cell.someLabel.text = CGRectGetWidth(cell.bounds) < 321 ? @"Concise" : @"Much longer blurb";

    return cell;
}
在方向转换期间调用

reloadData来更新标签。

虽然这恰好有用,但我想有一种更好的方法来处理这个问题,而不涉及重新加载tableView的开销。

(没有任何约束需要更改。标签位于同一个地方,但只要有更多空间,就会显示不同的内容。)

  • 我应该继承UILabel并更改-didMoveToSuperview中的文字吗?

  • 是否可以更改-layoutSubViews中的文字? (这不会导致另一个布局通过,因为文本被更改了吗?)

感谢您的回答!

1 个答案:

答案 0 :(得分:4)

只需将此逻辑添加到layoutSubviews即可。每次自动布局引擎都会调用它时调用它。

-(void)layoutSubviews {
    self.someLabel.text = CGRectGetWidth(self.bounds) < 321 ? @"Concise" : @"Much longer blurb";
    [super layoutSubviews];
}