具有不同高度的UITableViewCells标签会改变标签的宽度

时间:2011-05-12 19:25:47

标签: iphone cocoa-touch uitableview

在我的UITableViewCells中,我正在显示不同长度的文本。为了容纳更大量的文本,同时也不需要小文本数量在巨大的表格单元格中,我在这里设置行的高度...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    float padding = 40.0f;
    CGSize constraintSize;
    constraintSize.width = 320.0f - padding - padding;
    constraintSize.height = MAXFLOAT;
    CGSize theSize = [thisrowstext sizeWithFont:[UIFont systemFontOfSize:14.0f] 
                            constrainedToSize:constraintSize 
                                lineBreakMode:UILineBreakModeWordWrap];

    if(theSize.height < 24.0f) return 44.0f;
    else return theSize.height + 20.0f;
}

...它运行良好,不幸的是textLabel的宽度似乎也受到影响,一些textLAbels(取决于行数)被推入几个像素。我已经尝试设置缩进值,但这不起作用。还有其他人遇到过这个吗?

编辑:我正在添加我正在使用的UITableViewCell子类的layoutSubviews方法(没有NIB)。

- (void)layoutSubviews
{
    [super layoutSubviews];

    if (self.hideImage)
    {
            self.imageView.alpha = 0.0f;
            self.imageView.frame = CGRectMake(-40.0f, 1.0f, 40.0f, 40.0f);
            CGRect frame = self.textLabel.frame;
            self.textLabel.frame = CGRectMake(frame.origin.x - 40.0f, frame.origin.y, frame.size.width + 40.0f, frame.size.height);
            [self.textLabel setNeedsLayout];

    }
    else
    {
            self.imageView.alpha = 1.0f;
            self.imageView.frame = CGRectMake(1.0f, 1.0f, 40.0f, 40.0f);        
            [self.textLabel setNeedsLayout];
    }
}

编辑:还添加了cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *TableCellViewWithHidableImageIdentifier = @"TableCellViewWithHidableImage";
    TableCellViewWithHidableImage *cell = (TableCellViewWithHidableImage *)[tableView dequeueReusableCellWithIdentifier:TableCellViewWithHidableImageIdentifier];
    if (cell == nil)
    {
        cell = [[[TableCellViewWithHidableImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableCellViewWithHidableImageIdentifier] autorelease];
    }

    cell.hideImage = NO;
    cell.imageView.image = [UIImage imageNamed:@"empty.png"];
    cell.textLabel.font = [UIFont systemFontOfSize:16.0f];
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.text = @"whatever";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    return cell;    
}

enter image description here

2 个答案:

答案 0 :(得分:1)

如果不了解如何生成表格单元格,很难说清楚。你的细胞使用笔尖吗?我发现使用笔尖更容易自定义表格单元格,所以如果你还没有,请尝试一下。

我怀疑您的一个或多个表格单元格的子视图中的autoresizeMask可能有问题。

答案 1 :(得分:0)

这是一个猜测,但它看起来像是在单元格左侧的imageView。好像单元格越来越高,它越来越宽(试图保持纵横比?),这就是将文本推向右边。奇怪的是你的形象没有被拉伸。在layoutSubviews期间,可能值得查看该图像视图的内容。如果您的自定义单元格没有实现此方法,那么基类的实现可能正在做您不期望的事情。您可以在调用NSLog之前和之后覆盖它并[super layoutSubviews]到图像视图的框架,以查看最新情况。