0

以编程方式设置高度时,我的 UICollectionViewCell 出现问题。当集合首次加载时,它看起来不错,但是当集合滚动时,单元格会失去它的高度。

这是滚动前的样子:https ://dl.dropboxusercontent.com/u/11335239/Captura%20de%20Tela%202013-09-05%20%C3%A0s%2016.18.41.png

这是滚动后:https ://dl.dropboxusercontent.com/u/11335239/Captura%20de%20Tela%202013-09-05%20%C3%A0s%2016.18.46.png

要计算 se 单元格高度,我使用以下方法:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *texto = ([[self.jsonMensagem objectAtIndex:indexPath.row] objectForKey:@"conteudo"] != [NSNull null]) ? [Metodos formatarTexto:[[[self.jsonMensagem objectAtIndex:indexPath.row] objectForKey:@"conteudo"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]] : @"";

    float height = [texto sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14.0] constrainedToSize:CGSizeMake(220.0, 99999.0f) lineBreakMode:NSLineBreakByWordWrapping].height;

    NSLog(@"\n\nText: %@\nheight: %f", texto, height);

    tamanho = CGSizeMake(310.0, (height > 50) ? height + 20 : 60);

    return tamanho;
}

这是它返回的内容:

文本:Lorem ipsum dolor sit amet,consectetur adipiscing elit。在 consequat nunc a erat faucibus 中,请坐 amet interdum ipsum auctor。Praesent sagittis feugiat aliquet。Phasellus dictum laoreet auctor。Nulla aliquet enim ut ligula sodales,sed tempor nisl interdum。Nullam et libero 精英。在 dignissim dignissim pharetra。Proin in ligula a erat vehicula mollis。高度:198.000000 2013-09-06 10:34:03.971 DApp[11370:c07]

创建单元格:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{        
    perfilMensagemEnviada *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellMensagemEnviada" forIndexPath:indexPath];

    cell.textViewMensagem.text = ([mensagem objectForKey:@"conteudo"] != [NSNull null]) ? [Metodos formatarTexto:[[mensagem objectForKey:@"conteudo"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]] : @"";

    cell.imageView.image = self.imagemUsuario;

    return cell;
}

我忘记了什么吗?

我刚刚解决了我的问题!下方链接

UICollectionView 在滚动后显示错误的单元格 - 出队问题?

4

1 回答 1

1

比较两个屏幕截图,第三行位于相同的位置,这表明单元格的高度都是正确的。所以我会得出结论,问题出在单元格内的布局上。由于您仅在滚动时才能看到此内容,因此我会说这可能是典型的单元格重用问题。

当您滚动时,屏幕外的单元格将被重新用于屏幕上的单元格。在配置它们时,您必须考虑到这一点cellForRowAtIndexPath,消除它们以前使用的任何副作用。换句话说,您必须在配置之前准备好单元格以供重复使用。如果您使用的是自定义单元格类,则可以在prepareForReuse. 或者你可以在cellForRowAtIndexPath.

如果您需要更具体的帮助,请提供有关您的单元格视图层次结构、您的cellForRowAtIndexPath方法以及您修改单元格内容或布局的任何其他代码的详细信息。

原来的

我看不出texto给定值怎么可能是正确的,indexPath因为您没有将其设置为sizeForItemAtIndexPath. 因此,您正在根据 . 的错误值计算大小textto。所以你只需要检索正确的值。如果您需要更多帮助,请分享更多您的视图控制器代码,以便我们查看您的数据模型。

于 2013-09-05T21:31:57.883 回答