具有自定义单元格和标签的heightForRowAtIndexPath

时间:2013-02-15 12:27:13

标签: ios objective-c uitableview heightforrowatindexpath

如果我正在制作自定义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;
}

2 个答案:

答案 0 :(得分:0)

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

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

无论IB中的每个单元格的大小或您尝试放入文本的文本,结果都应正确显示。

修改

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

计算文本所需的高度时,可以使用300宽度计算它。它将返回一个大小,如{300,250}。 250是文本所需的高度,但是你的单元格中还有其他内容,你需要将那些顶部和机器人边距添加到其中,因此结果为450.

请记住设置自动调整遮罩或自动布局,以便文本区域垂直拉伸并且边距是固定的(UIViewAutoresizingFlexibleHeight

答案 1 :(得分: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;