うるおいらんど

アプリ開発やサイト制作のメモとか。

【Swift】UICollectionViewで二重に表示されるのを防ぐ

魚ライン
魚ライン

UICollectionViewを用いて画像を表示させていたのですが、スクロールすると以前の画像と重なって表示されるという事態に陥りました。

少しだけハマったけれどあまり時間もかからずに解決したのでよかったです。

 

原因としてはセルを再利用するときに再利用前の画像がそのまま表示されてしまっている、ということ。

 

addSubviewをするとデータが蓄積される

まず、collectionView:cellForItemAtIndexPath:のメソッド内でセルをカスタマイズします。セルを再利用するよ〜と宣言しておきます。

 

そもそもここでセルをカスタマイズするのがあまりよろしくないらしいが、とりあえずそれは置いといて。

このセルの上にImageViewを配置してそこに画像を表示させます。

こんな感じ。

addSubviewをするときにcellに直接addSubviewもできますが、contentViewを挟んだほうが良いらしい。

そしてこのaddSubviewしたものはどんどん蓄積されていきます。二重に表示されるどころか、メモリ効率も悪くなってしまいます。

 

解決方法

addSubviewをする前にcellのsubviewを削除しておきます。

これをaddSubviewの前に書いておきます。そうすることでsubviewの中身を初期化しておくことができます。

 

ラベルとかも色々そこで書いていたのでとにかくカオスな状況になっていたのが解決してよかったです。

メソッド内のコードはこんな感じ。

 

参考サイト

UITableViewについて

UITableViewの表示がおかしい時、確認すること その2

 

参考にしているのがSwiftでもなければUICollectionViewでもないあたりがオモシロイ。笑

あとはデータの削除が終わればUICollectionViewに関してはほぼ完成です。頑張っていこー(´・ω・`)

魚ライン 魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン