自定义UITableViewCell更新子视图

时间:2016-08-08 07:40:40

标签: ios uitableview

我有一个自定义的UITableviewCell。里面有一个标题标签和一个细节标签。

现在我想根据内容调整细节标签属性。 如果字符串大小大于帧,则将行数设置为2.

我试图将代码放在单元格类的cellForRowAtIndexPathlayoutSubViews中。

这段代码就像

TransportationViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
UIFont* font = cell.detailLabel.font;
NSDictionary* attribute = @{NSFontAttributeName:font};
const CGSize textSize   = [cell.detailLabel.text sizeWithAttributes: attribute];

if (textSize.width > cell.detailTextLabel.frame.size.width && cell.detailLabel.numberOfLines == 1) {

    NSLog(@"%lf, %lf, %lu", cell.detailLabel.frame.size.width, textSize.width, (long)cell.detailLabel.numberOfLines);
    cell.detailTextLabel.font = [UIFont systemFontOfSize:8];
    cell.detailTextLabel.numberOfLines = 2;

    [cell setNeedsLayout];
}

它实际上通过了if条件,但标签的设置不起作用。

2 个答案:

答案 0 :(得分:1)

在视图didload中写下代码

self.theTableView.estimatedRowHeight = 100;
self.theTableView.rowHeight = UITableViewAutomaticDimension;

[self.theTableView setNeedsLayout];
[self.theTableView layoutIfNeeded];

在cellForRowAtIndexpath中cell.detailTextLabel.numberOfLines = 0;

答案 1 :(得分:0)

设置numberOfLines = 0;

这将解决您的问题。

编辑1:计算动态高度的代码。

 CGSize boundingBox = [label.text boundingRectWithSize:constraint
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{NSFontAttributeName:label.font}
                                              context:context].size;

根据这个高度,您可以进行进一步的计算。

有关详情,请查看此答案https://stackoverflow.com/a/27374760/5660422