我有一个带有一些单元格(字幕样式)的UITableView,它可以在标题和字幕字段中包含无限量的文本(这是客户要求,否则无法说服它们)。我已经构建了一些我在heightForRow中调用的方法:atIndexPath来确定UILabels的高度。这些方法取决于知道所讨论的UILabel的宽度。我不知道如何获得这个价值。目前,我已经使用在iPhone 5S模式下运行的模拟器上的日志语句提取了一个值。这不是一个稳定的解决方案。任何想法如何实现这一目标?
以下是我目前正在使用的方法:
-(CGFloat) heightForSubtitleCellWithTitleString:(NSString *)titleString withFont:(UIFont *)titleFont withDetailString:(NSString *)detailString withFont:(UIFont *)detailFont withTableView:(UITableView *)tableView
{
if (!detailString) {
detailString = @"Dummy text!"; // <-- Hacky, but when there is no detail text, we need to make room for the placeholder text.
}
CGRect rectForDetailString = [self rectForString:detailString withFont:detailFont withWidth:tableView.bounds.size.width - 54]; // 54 is the difference between the width of the label and tableview at runtime. On an iPhone 5 screen. Mæh.
CGRect rectForTitleString = [self rectForString:titleString withFont:titleFont withWidth:tableView.bounds.size.width - 54];
CGFloat height = ceilf(CGRectGetHeight(rectForTitleString) + CGRectGetHeight(rectForDetailString) + 10); // 10 is the padding between labels and top and bottom of the cell
return height;
}
-(CGRect) rectForString:(NSString *)string withFont:(UIFont *)font withWidth:(CGFloat)width
{
CGSize maximumLabelSize = CGSizeMake(width, LONG_MAX);
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
NSStringDrawingOptions options = NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin;
NSDictionary *attr = @{NSFontAttributeName : font,
NSParagraphStyleAttributeName : paragraphStyle};
CGRect labelBounds = [string boundingRectWithSize:maximumLabelSize
options:options
attributes:attr
context:nil];
return labelBounds;
}
答案 0 :(得分:0)
让高度= 30的文字标签,固定高度
label.text = detailstext;
float lableWidth = [label sizeThatFits:CGSizeMake(INT_MAX, 30)].width;
答案 1 :(得分:0)
使用自动布局,您可以固定标签的顶部,尾部和前缘,并让其内容决定自己的大小。将行数设置为0.此外,通过自动布局,UITableViewCell根据其内容视图的子视图高度计算单元格高度。
以下方法可用于动态计算配置的单元格高度。但是你需要注意这个方法被调用每个单元格。 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
因此,如果单元格数量更多则存在性能问题/延迟。要解决此问题,我们可以使用iOS8中添加的新api。
此方法允许表格视图懒惰地计算每个单元格的实际高度。