2017-03-14 9 views
1

iOS 10.3 beta 6のコレクションビューのセルに画像(UIImageView)を表示する際に問題が発生していませんか?最初に表示されたセルはイメージを表示しますが、スクロールして表示される新しい/デキューされたセルはイメージを表示しません。これはObjective Cであり、Swiftでまだ試していない。その後、cellForItemAtIndexPathからiOS 10.3 beta - CollectionViewCellのImageViewバグ?

@interface StdCollectionViewCell : UICollectionViewCell 

@property (strong, nonatomic) IBOutlet UIImageView *fileImage;  // for thumbnail image of file 
@property (strong, nonatomic) IBOutlet UITextView *fileTextView; // for name or description of file 
@property (nonatomic) BOOL unviewed;        // has the user viewed this file yet 

@end 

、私はUIImage(私が確認したnullではない)を取得、セルのfileImage.imageプロパティを設定します: セル定義

theCell.fileImage.image = image;                      // set the thumbnail image 

私は画像を割り当てた後setNeedsDisplayを使用してみましたしかし、それは助けになりませんでした。問題は、iOSの10

で利用可能な新機能から来て

+2

CollectionViewの属性インスペクタで、セルをプリフェッチしていないことを確認できますか?セクションヘッダーとセクションフッターのすぐ下にこのオプションがあります。 – Balanced

+0

一行の抜粋ではなく、完全なコードを表示してください。誰かが再現できるようにするコードを表示してください。 – matt

+0

@Murloc、提案をいただきありがとうございます。セルプリフェッチをオフにすると、問題は解決します。奇妙なことに、これはちょうど私のためにベータ6で切り取られました。セルをプリフェッチすると、セルが見えるようになっても画像が表示されなくなります。まだバグのようです。 – guywithmazda

答えて

0

は、私が把握することができました表示されます。

プリフェッチが起こる前(おそらくiOS 9がそれ以前であったとしても)、私はイメージを作成して別のキューに取得するコードを作成しました。準備が整い次第、セルのUIImageViewオブジェクトに割り当てるコードがメインキューに返されました。

イメージが準備完了する前にユーザーが画面をスクロールしてセルをスクロールした場合、サイクルを無駄にしないために、次の手順に進む前に、セルが表示されているかどうかを確認するためにindexPathsForVisibleItemsを確認しました。パスがその配列にない場合は、イメージのnilを返すだけです。また、UIImageView.imageプロパティにイメージを割り当てる準備ができたら、コレクションビューのcellForItemAtIndexPathを使用しました。

明らかindexPathsForVisibleItemsがまだ表示されていないプリフェッチ細胞を含むべきではないため、プリフェッチと、これは、動作しないはずであり、cellForItemAtIndexPathのセルが表示されていない場合に設定する(nullを返すするようメッセージを想定していますイメージはnullに送信されます)。

私の最初のデバッグではイメージを取得していました。しかし私は、その画像を割り当てようとしていたセル変数がnullであることに気付かなかった!

奇妙なことに、このコードは先読みされたセルが目に見えるアイテムの配列に含まれ、cellForItemAtIndexPathがプリフェッチされているが表示されていないセルで動作していたことを示しているようです。私のコードが壊れてしまったようになったようです。

EDIT:結局奇妙なことではありません。私は、アプリケーションの以前のリリースがXcode 7を使用して完了したことを認識しました。つまり、プリフェッチをしていないiOS 9 SDKを使用して作成されました。したがって、iOS 10で動作していたとしても、プリフェッチは使用しませんでした。 Xcode 8でアプリを開くと、デフォルトでコレクションビューのプリフェッチが有効になりました。 Xcode 8でアプリをテストしたのは今回が初めてではありませんが、Xcode 8で作業している間はコレクションビューをスクロールしてはいけません。END EDIT。

クイックフィックスは、コレクションビューのプリフェッチをオフにすることです。これは、私たちの内部使用のためのエンタープライズアプリケーションであり、App Storeになければならないものではありませんそれは少し遅い場合。

私は(私も過去:)に他の人に与えている)マットのアドバイス@続き、最初のシンプルな例を生成するために試みたが、私はおそらく私の質問を投稿する前にこれを考え出しただろうしている必要があります。しかし、私はその日に何か他のことが起こっていて、気難しかったので、とにかく投稿しました。私は私の間違いから学ぶつもりです:)。

0

は確かに、コレクションビューの貧しいスクロール体験を向上させるためには、Appleがスムーズなスクロールを回避することを決めました。

あなたが見ることができるように:

プリフェッチは、このようにセルのデータソースを準備する 機会を提供し、あなたが表示されるように、細胞が必要になります コレクションビューの前に早期に通知されるメカニズムでありますセルの作成は実際には です。

は、この記事を見てください:問題を示したシンプルなアプリを作成しようとした際の画像は「werenなぜ

WWDC 2016

UICollectionView Prefetching in iOS 10

+0

ありがとう@Murloc。私はプリフェッチを知っていましたが、プリフェッチが導入される前に使用していたiOS 9のコードをテストしていましたが、iOS 10で問題なく動作していました.iOS 10.2.1とiOS 10.3 beta 6の間のある時点で動作しなくなりました。さらに調査した結果、私のコードは先読みと一緒に作業してはいけませんでしたが、そうしたので、iOS 10.3ベータサイクルで修正されたプリフェッチ機能にバグがあったに違いありません。 – guywithmazda

+0

@guywithmazdaあなたが解決策を見つけたと聞いてうれしいです:) – Balanced

関連する問題