2

如果我正在定制UITableViewCell并且我需要它根据输入的长度(例如,对于 Twitter 阅读器或其他东西)具有可变的高度,我怎样才能使它工作?

我在这里找到了许多其他示例,可以将其设置为标准的非自定义单元格,但我的单元格的主文本标签更小,等等,所以当我尝试在我的单元格上使用这些方法中的任何一种时,它们给出各种奇怪的结果(文本与单元格底部重叠等)

是否有设计单元格的标准化方法(例如,我应该在 Interface Builder 中制作多高?),假设我的标签是该单元格宽度的一半。我将如何计算单元格的高度需要显示加载到该标签中的字符串吗?这是我在这里找到的一种方法,它在普通单元格上运行良好,但是用奇怪的高度、重叠的文本等搞砸了自定义的:(我完全不知道 300 / 200000 在这里做什么,如果有人能解释一下我'我也感激不尽!)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGSize  textSize = {300.f, 200000.0f};
    CGSize  size = [[_quoteStringsFromPlist objectAtIndex: indexPath.row] sizeWithFont: [UIFont systemFontOfSize:12.0f] constrainedToSize: textSize lineBreakMode: NSLineBreakByWordWrapping];
    size.height += 5.0f;
    float result = MAX(size.height, 32.0f);
    return result;
}
4

2 回答 2

0

首先,转到您的 xib 文件,查看文本区域的顶部/底部边距有多大,以及它有多宽。

之后,您需要使用可用的宽度计算它所需的高度,然后将该值添加到文本区域已有的顶部/底部边距。

无论 IB 中每个单元格的大小或您尝试放入其中的文本如何,结果都应该看起来正确。

编辑

想象一下您的单元格大小{700, 300}在您的 IB 中,并且您的文本区域位于 上{{100, 100}, {300,100}},您的文本区域的顶部边距为 100px,bot 的边距为 100px,宽度为 300。

当您计算文本所需的高度时,您会使用可用的 300 宽度来计算它。它将返回一个大小,例如 {300, 250}。250 是您的文本所需的高度,但您的单元格中还有其他内容,您需要将这些顶部和底部边距添加到该高度,因此结果为 450。

请记住设置自动调整大小的蒙版或自动布局,以便您的文本区域垂直拉伸并且边距固定 ( UIViewAutoresizingFlexibleHeight)

于 2013-02-15T12:35:26.547 回答
0

像这样的东西应该工作。

CGRect labelFrame = // enter default frame of the label here
UIFont *labelFont = // enter label font here
CGFloat labelBottomMargin = // enter the space between the bottom of the label and the bottom of the cell here

CGSize  size = [labelString sizeWithFont:labelFont constrainedToSize:CGSizeMake(labelFrame.size.width, MAX_FLOAT)];
size.height += labeFrame.origin.y;
size.height += labelBottomMargin;
size.height = MAX(size.height, 32.0f);
return size.height;
于 2013-02-15T12:52:31.287 回答