滚动向上后UITableViewCell高度变化?

时间:2012-11-05 06:37:46

标签: ios uitableview uiscrollview uilabel

目前,当我在tableView中向上滚动时,我发现了一个奇怪且烦人的错误。当我决定释放“滚动”时,意味着我正在删除“滚动”,因此“视图”将返回到显示所有TableView内容的正常位置,我的一些单元格可以出于某种原因重新调整自己的大小。宽度。我不知道为什么会发生这种情况或者问题可能是什么。

我的单元格(commentLabel)根据我论坛中标签的高度自定义为fitSize。我认为问题可能在于我如何尝试自定义单元格的内容。我会发布我的相关代码,并发布到下面的图片。

在开始向上拖动滚动之前: http://tinypic.com/view.php?pic=2rfsum9&s=6

释放后/再次将滚动条拉到正常位置。现在其中一个单元格发生了变化: http://tinypic.com/view.php?pic=swxnqv&s=6

代码:

- (UITableViewCell *)tableView:(UITableView *)pTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ForumthreadCell";
    UITableViewCell *cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    Feedback *item = [self.items objectAtIndex:indexPath.row];

    UILabel *aliasLabel = (UILabel *)[cell viewWithTag:1];
    UILabel *commentLabel = (UILabel *)[cell viewWithTag:2];
    UILabel *dateLabel = (UILabel *)[cell viewWithTag:3];

    [aliasLabel setText:item.alias];
    [commentLabel setText:item.comment];
    [dateLabel setText:[self.dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:(double)item.time]]];

    commentLabel.numberOfLines = 0;
    [commentLabel sizeToFit];

    return cell;

}

-(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
{

    CGSize maximumSize = CGSizeMake(labelWidth, 10000);

    //provide appropriate font and font size
    CGSize labelHeighSize = [text sizeWithFont: [UIFont fontWithName:@"Trebuchet MS" size:12.0f]
                     constrainedToSize:maximumSize
                         lineBreakMode:UILineBreakModeTailTruncation];
    return labelHeighSize.height;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    Feedback *item = [self.items objectAtIndex:indexPath.row];

    CGFloat commentTextHeight = [self getLabelHeightForText:item.comment andWidth:162];
    return commentTextHeight + 39;

}

修改

新代码:

CGRect frame = commentLabel.frame;
frame.size.width = kLabelWidth;
frame.size.height = 10000;
commentLabel.frame = frame;

frame = commentLabel.frame;
frame.size.height += kOffset;
commentLabel.frame = frame;

但是我做错了,因为现在来自commentLabel的文本没有正确显示,在我尝试设置框架时,任何人都可以理解我的错吗?这就是现在单元格的样子http://oi50.tinypic.com/2w5u0s6.jpg

新的完整代码:

static const CGFloat kLabelWidth = 162;
static const CGFloat kOffset = 39;

- (UITableViewCell *)tableView:(UITableView *)pTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ForumthreadCell";
    UITableViewCell *cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    Feedback *item = [self.items objectAtIndex:indexPath.row];

    UILabel *aliasLabel = (UILabel *)[cell viewWithTag:1];
    UILabel *commentLabel = (UILabel *)[cell viewWithTag:2];
    UILabel *dateLabel = (UILabel *)[cell viewWithTag:3];

    [aliasLabel setText:item.alias];
    [commentLabel setText:item.comment];
    [dateLabel setText:[self.dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:(double)item.time]]];

    CGRect frame = commentLabel.frame;
    frame.size.width = kLabelWidth;
    frame.size.height = 10000;
    commentLabel.frame = frame;

    frame = commentLabel.frame;
    frame.size.height += kOffset;
    commentLabel.frame = frame;

    commentLabel.numberOfLines = 0;
    [commentLabel sizeToFit];

    return cell;

 }

1 个答案:

答案 0 :(得分:3)

您应该在重复使用单元格之前调整标签框架。在您的情况下,您正在重新使用

中的单元格高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

但你也应该根据细胞的高度调整标签的框架,这样它就不会超出细胞的范围。