Ios6 UICollectionView SizeFormiteIndeXPath

Ios6 UICollectionView SizeFormiteIndeXPath,ios6,uicollectionview,Ios6,Uicollectionview,以编程方式设置UICollectionViewCell的高度时,我的UICollectionViewCell出现问题。当集合首次加载时,它显示为ok,但当集合滚动时,单元格将失去其高度 这是滚动前的外观: 这是在滚动之后: 要计算se单元高度,我使用以下方法: - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeFo

以编程方式设置UICollectionViewCell的高度时,我的UICollectionViewCell出现问题。当集合首次加载时,它显示为ok,但当集合滚动时,单元格将失去其高度

这是滚动前的外观:

这是在滚动之后:

要计算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,奉献精英。在里面 在faucibus会议上,我坐在同一个拍卖人的位子上。 前矢状体是封建的。《老友记》拍卖人。 在苏打舌苔中,有时也会出现不适。纳拉姆 自由精英。以尊严的姿态,尊严的法雷特拉。叶舌中的脯氨酸 软体动物。身高:1980000002013-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;
}
我忘了什么吗

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


比较两个屏幕截图,第三行的位置相同,这对我来说表明单元格的高度都是正确的。因此,我认为问题在于单元内部的布局。因为只有在滚动时才会看到这一点,所以我认为这可能是一个典型的单元重用问题

滚动时,屏幕外的单元格将重新用于屏幕上的单元格。当您在
cellforrowatinexpath
中配置它们时,必须考虑到这一点,删除它们以前使用的任何副作用。换句话说,您必须在配置单元之前准备单元以供重用。如果您使用的是自定义单元格类,则可以在
prepareforeuse
中执行此操作。或者您可以在
cellforrowatinexpath
中执行此操作

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

原创


我不知道
texto
如何成为给定
indepath
的正确值,因为您没有在
sizeFormiteIndepath
中设置它。因此,您正在根据
textto
的错误值计算大小。因此,您只需要检索正确的值。如果您需要更多帮助,请共享更多视图控制器代码,以便我们可以查看您的数据模型。

请记录每次返回的CGSize,并找出每次是否相同?实际上texto是一个字符串[[NSArray objectAtIndex:indexath.row]object forKey@“descripao”]为什么使用静态字符串@“My string”计算高度?困惑。抱歉,您只是提供的信息不够有用。我不知道在选项卡之间切换时代码中发生了什么。我建议您从了解布局方面的问题开始。尝试在
单元格中放置断点,然后在控制台中运行命令
po[self.collectionView recursiveDescription]
。这将显示整个集合视图层次结构,以及哪些视图具有不正确的框架。另外,请在您的问题中发布代码或控制台输出,而不是在注释中,以便我们阅读。