私はUICollectionView
を持っており、CollectionViewにデータがあるかどうかに基づいてbackgroundViewプロパティを使用して背景イメージを設定しようとしています。データを変更するナビゲーションがあり、コレクションビュー([self.collectionView reloadData]
)を再読み込みします。何らかの理由で私は非常に奇妙な結果を得ています。まず、プロパティを設定すると、collectionViewセルの上に表示され、それらを隠すことがあります。次に、プロパティを変更しようとすると、画面上で変更されません。 これは私をナットにしています!実装するのはとても簡単なことでした。UICollectionViewのbackgroundViewプロパティを変更できません
だからコードです。 UICollectionViewController
- (void)viewDidLoad {
[self loadSections];
[self setupBackgroundView;
}
ためviewDidLoad
の負荷セクション方法はちょうど私が、その後も存在する場合に基づいて、追加するためにどのようなビューを決定した背景ビューを設定するためのメソッドを呼び出し、コレクションビューのために使用していたデータをロードします以下のように任意のデータ:
- (void)loadSections {
[self loadPictures];
[self setupBackgroundImage];
}
- (void)setupBackgroundImage {
if ([self.sections count] == 0 || !self.sections) {
self.collectionView.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TakePhoto"]];
}
else {
self.collectionView.backgroundView = nil;
}
}
今すぐビューが最初にロード、
そこにはデータがありませんので、背景画像を表示する一切の細胞が正しく来ない場合。データを変更して表示するセルがあり、setupBackgroundImageが呼び出され、backgroundImageプロパティがnilに設定されていることを確認できます(ここでブレークポイントを設定して値をチェックしてもそれはゼロです)。しかし、背景画像はまだ見える。
また、nilを別のイメージに変更すると、この新しいイメージは表示されません。
さらに奇妙です。いくつかのセルが表示され、背景イメージを設定すると、このイメージはセルの後ろにきれいに表示されます。新しいデータセットでデータを再ロードすると、セルの前にイメージが表示され、セルが隠されます。私は、バックグラウンドビューが他のすべての背後にあるべきであるとして、これがどのように起こるか分かりません。
これはなぜ起こっているのですか?それはどこにでもキャッシュされていますか?または私はちょうど何かばかげているのですか?私はここで全然犠牲になっています - それはそれが使用するカスタムレイアウトを書くより多くの時間を費やしました!
複数の「UICollectionViews」が作成され、サブビューとして追加されましたか?それはあなたが見ている行動を説明するでしょう。 – bobnoble
コメントありがとうbobnoble。もしこれが起こったのではないかと思った。私が知る限りでは、コードのチェックとInstruments Allocationツールの実行の両方から、いいえ、ただ1つのUICollectionViewがあります。 – SimonB
あなたのsetupBackgroundImageがメインスレッド以外のスレッドで呼び出されることがありますか? – honus