向上滚动后我的单元格的大小?(My cell's resize after scrollin

2019-11-01 04:36发布

我有我的TableViewCell的布局问题。 目前,我在我的tableView向上滚动,我发现一个奇怪的和恼人的错误。 当我决定释放“滚动”,意思是我滴“滚动”,让“查看”,将返回到显示所有的TableView内容的正常位置,我的一些细胞的罐头出于某种原因重新大小自己对宽度。 我为什么这会发生或问题可能是什么毫无头绪。

我的所有细胞的定制取决于标签(commentLabel)在我的论坛的高度fitSize。 我认为问题可能是我怎么想定制我的单元格的内容。 我会后我的相关代码,并张贴到下面的图片。

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

获释后/再DROP掉滚动到其正常位置。 现在,小区的一个变化 : 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];
    [aliasLabel sizeToFit];
    [dateLabel 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;
}

编辑

NSLog(@"bounds.origin.x: %f", commentLabel.bounds.origin.x);
NSLog(@"bounds.origin.y: %f", commentLabel.bounds.origin.y);
NSLog(@"bounds.size.width: %f", commentLabel.bounds.size.width);
NSLog(@"bounds.size.height: %f", commentLabel.bounds.size.height);

NSLog(@"frame.origin.x: %f", commentLabel.frame.origin.x);
NSLog(@"frame.origin.y: %f", commentLabel.frame.origin.y);
NSLog(@"frame.size.width: %f", commentLabel.frame.size.width);
NSLog(@"frame.size.height: %f", commentLabel.frame.size.height);

导致此输出1个细胞(1个commentLabel输出)

purgeIdleCellConnections: found one to purge conn = 0x1dd654f0
 bounds.origin.x: 0.000000
 bounds.origin.y: 0.000000
 bounds.size.width: 162.000000
 bounds.size.height: 10039.000000
 frame.origin.x: 12.000000
 frame.origin.y: 28.000000
 frame.size.width: 162.000000
 frame.size.height: 10039.000000

Answer 1:

当你重复使用的细胞,你应该将所有标签的框架。 那原因是-sizeToFit将改变标签的帧,所以当你重用细胞,标签的框架已经改变。

编辑

你可以这样做:

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

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

    UILabel *commentLabel = (UILabel *)[cell.contentView viewWithTag:2];
    CGRect frame = commentLabel.frame;
    frame.size.width = kLabelWidth;
    frame.size.height = 10000;
    commentLabel.frame = frame;
    commentLabel.text = @"your text";
    [commentLabel sizeToFit];

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

    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {
    CGFloat commentTextHeight = [self getLabelHeightForText:@"your text" andWidth:kLabelWidth];
    return commentTextHeight + kOffset;
}


文章来源: My cell's resize after scrolling upwards?