Mam UICollectionView
i próbuję ustawić obraz tła przy użyciu właściwości backgroundView na podstawie, czy istnieją jakiekolwiek dane w CollectionView, czy nie. Mam nawigację, która zmieni dane i ponownie załaduje widok kolekcji (wywołanie [self.collectionView reloadData]
). Z jakiegoś powodu otrzymuję bardzo dziwne wyniki. Po pierwsze, czasami kiedy ustawiam właściwość, pojawia się ona na górze komórki collectionView i zasłania je. Po drugie, kiedy próbuję zmienić właściwość, nie zmienia się ona na ekranie. To doprowadza mnie do szału! Wydawało się, że jest to takie proste!Nie można zmienić właściwości backgroundView na UICollectionView
Tak w Kod. W viewDidLoad
dla UICollectionViewController
- (void)viewDidLoad {
[self loadSections];
[self setupBackgroundView;
}
Sposób odcinki obciążenia tylko wczytuje dane używam dla widoku kolekcji, która następnie również wywołuje metodę, aby ustawić tło widoku, który decyduje, co widok, aby dodać na podstawie, jeśli istnieje wszelkie dane jak poniżej:
- (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;
}
}
teraz, gdy widok pierwsze ładunki, jeśli nie ma żadnych danych i tak nie ma komórki, aby wyświetlić obraz tła pojawia się prawidłowo. Następnie zmieniam dane i mam teraz kilka komórek do wyświetlenia, wywoływany jest setupBackgroundImage i mogę zweryfikować, że właściwość backgroundImage jest ustawiona na zero (nawet tu złamałem i sprawdziłem wartość i jest ona zerowa). ALE obraz tła jest nadal widoczny.
Dodatkowo, jeśli zmienię zero na inny obraz, ten nowy obraz nigdy nie jest wyświetlany.
I jeszcze bardziej dziwne. Jeśli mam kilka komórek wyświetlanych i ustawiam obraz tła, ten obraz jest wyświetlany dokładnie za komórkami. Jeśli następnie ponownie załaduję Data z nowym zestawem danych, obraz zostanie wyświetlony przed komórkami, zasłaniając je. Nie mam pojęcia, jak to się dzieje, ponieważ wtedy widok tła powinien znajdować się za wszystkimi pozostałymi.
Czy ktoś wie, dlaczego tak się dzieje. Czy jest on buforowany w dowolnym miejscu? czy robię coś głupiego? Mam tu całkowitą stratę - poświęciłem na to więcej czasu niż pisanie niestandardowego układu, którego używa!
jakaś szansa wielokrotnego 'UICollectionViews' są tworzone i dodawane jako subviews? To by wyjaśniało zachowanie, które widzisz. – bobnoble
Dzięki za komentarz bobnoble. Zastanawiałem się też, czy to się mogło stać. O ile wiem, zarówno od sprawdzenia kodu, jak i od uruchomienia narzędzia Przyporządkowanie instrumentów, a następnie nie, istnieje tylko jeden UICollectionView. – SimonB
Czy istnieje szansa, że twój setupBackgroundImage jest czasami wywoływany w wątku innym niż główny wątek? – honus