我有一个自定义的UITableviewCell
。里面有一个标题标签和一个细节标签。
现在我想根据内容调整细节标签属性。 如果字符串大小大于帧,则将行数设置为2.
我试图将代码放在单元格类的cellForRowAtIndexPath
或layoutSubViews
中。
这段代码就像
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条件,但标签的设置不起作用。
答案 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