回答編集履歴

2

補足を追加しました。

2019/02/05 08:58

投稿

fumiaki
fumiaki

スコア56

test CHANGED
@@ -49,3 +49,45 @@
49
49
 
50
50
 
51
51
  簡単な対応としては、上記のcellを返却しているif文の箇所をコメントアウトすれば、毎回cellの画像がindexPathに応じたものにセットし直されることになるので想定している挙動になるかと思います。
52
+
53
+
54
+
55
+
56
+
57
+ ---
58
+
59
+ **補足**
60
+
61
+ ```swift
62
+
63
+ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
64
+
65
+ ```
66
+
67
+ 上記の処理でCollectionViewから"cell"というIDの付いたセルを取得しています。
68
+
69
+ この時、CollectionViewは同じIDを持った再利用可能なセルが有ればそれを取得し、
70
+
71
+ 再利用可能なものがなければ新しく生成したセルを返却してきます。
72
+
73
+
74
+
75
+ 再利用可能かどうかは、基本的に画面に表示中かどうかで判断されているようなので、
76
+
77
+ 画面外に出たセルが再利用される形になります。
78
+
79
+ ※ちなみに、画面に表示中の有効なセルはCollectionViewのvisibleCellsという配列に格納されています。
80
+
81
+
82
+
83
+ 前述にも軽く書きましたが、dequeueReusableCell(withReuseIdentifier:for:)メソッドの引数のIDが同じものの中でセルの再利用が行われます。
84
+
85
+ 極端な話、すべてのセルで異なるIDを使えば再利用が行われず、indexPathでユニークにすることも可能です。。
86
+
87
+ ※ただし、すべてのセルがメモリ上にキャッシュされることになってしまうので、推奨される方法ではありません。
88
+
89
+ (あと、事前にセルのIDを決めて準備しておかないといけないので、面倒です。)
90
+
91
+
92
+
93
+ 作ったセルは再利用されるものと思って実装しておいたほうが、今回の様な現象を見た時に対処しやすいと思います。

1

文字表記の修正

2019/02/05 08:58

投稿

fumiaki
fumiaki

スコア56

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- 例えば、一度下にスクロールしてセルが表示された後に、上にスクロールして行った場合、画面外に出た下のセルが新しく上から表示されるセルに再利用されたりします。
11
+ 例えば、一度下にスクロールしてセルが表示された後に、上にスクロールしなおした場合、画面外に出た下のセルが新しく上から表示されるセルに再利用されたりします。
12
12
 
13
13
 
14
14