0

プログラムで高さを設定するときに、UICollectionViewCell に問題があります。コレクションが最初に読み込まれると問題なく表示されますが、コレクションがスクロールされるとセルの高さが失われます。

これはスクロール前の外観です:

これはスクロール後のものです: https://dl.dropboxusercontent.com/u/11335239/Captura%20de%20Tela%202013-09-05%20%C3%A0s%2016.18.46.png

セルの高さを計算するには、次の方法を使用しています。

- (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. In consequat nunc a erat faucibus, sit amet interdum ipsum auctor. Praesent sagittis feugiat aliquet. Phasellus dictum laoreet auctor. Nulla aliquet enim ut ligula sodales, sed tempor nisl interdum. ヌラムとリベロのエリート。ディグニシムでディグニシム・ファレトラ。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

2 つのスクリーンショットを比較すると、3 行目は同じ位置にあり、セルの高さがすべて正しいことがわかります。したがって、問題はセル内のレイアウトにあると結論付けます。これはスクロールしたときにしか表示されないため、これはおそらく典型的なセルの再利用の問題だと思います。

スクロールすると、画面外に出たセルが、画面に出てくるセルに再利用されます。cellForRowAtIndexPath以前の使用の副作用を取り除いて構成するときは、これを考慮に入れる必要があります。つまり、セルを構成する前に、セルを再利用できるように準備する必要があります。カスタム セル クラスを使用している場合は、 でこれを行うことができますprepareForReuse。または、 で実行できますcellForRowAtIndexPath

より具体的なヘルプが必要な場合は、セルのビュー階層、cellForRowAtIndexPathメソッド、およびセルのコンテンツまたはレイアウトを変更するその他のコードに関する詳細を提供してください。

オリジナル

で設定していないためtexto、与えられたの正しい値になる方法がわかりません。したがって、 の間違った値に対してサイズを計算しています。したがって、正しい値を取得する必要があります。さらにサポートが必要な場合は、データ モデルを確認できるように、View Controller コードをさらに共有してください。indexPathsizeForItemAtIndexPathtextto

于 2013-09-05T21:31:57.883 に答える