heightForRowAtIndexPath不显示多行

时间:2011-03-05 18:15:29

标签: objective-c ios uitableview

当文本比平时长时,heightForRowAtIndexPath永远不会显示多行。

这是我的代码:

#define FONT_SIZE 14.0f
#define CELL_CONTENT_WIDTH 320.0f
#define CELL_CONTENT_MARGIN 10.0f

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat     result = 44.0f;
    CGFloat     width = 0;
    CGFloat     tableViewWidth;
    CGRect      bounds = [UIScreen mainScreen].bounds;

    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation))
        tableViewWidth = bounds.size.width;
    else
        tableViewWidth = bounds.size.height;

    width = tableViewWidth - 110;       // fudge factor, 115 isn't quite right

    NSUInteger index = [indexPath row];
    id doc = [[self displayedObjects] objectAtIndex:index];

    NSString *title = [doc title];  

    if (title)
    {
        // The notes can be of any height
        // This needs to work for both portrait and landscape orientations.
        // Calls to the table view to get the current cell and the rect for the 
        // current row are recursive and call back this method.
        CGSize      textSize = { width, 20000.0f };     // width and height of text area
        CGSize      size = [title sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];

        size.height += 29.0f;               // top and bottom margin
        result = MAX(size.height, 44.0f);   // at least one row
    }

    return result;
}

任何帮助都将非常感激。 谢谢!

2 个答案:

答案 0 :(得分:3)

要使标签显示多行文本,必须将其numberOfLines属性设置为允许的最大行数(或对于任意行号,设置为0)。所以在cellForRowAtIndexPath:方法中设置你的单元格时添加:

...
cell.textLabel.numberOfLines = 0;
...

答案 1 :(得分:0)

我想您不使用自定义UITableViewCell。因此,您可能会使用类似于以下代码的地方设置标题:

cell.textLabel.text = @"long long long text";

要在多行上显示文本,您必须配置默认标题UILabel以在多行上显示其文本。像这样:

cell.textLabel.numberOfLines = 3;

您可以使用与计算单元格高度相同的方式计算行数。事实上,我认为你必须计算两者来做你想要的(高度适应内容)。

CGSize      size = [title sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];

textSize中重要的是设置width属性的行宽和一个“large”足以“托管”文本的高度值。

初始化size后,您可以将高度除以UILabel线的高度。