Die backgroundView-Eigenschaft in UICollectionView kann nicht geändert werden

8

Ich habe ein UICollectionView und ich versuche, ein Hintergrundbild mit der backgroundView-Eigenschaft basierend darauf, ob Daten in der CollectionView vorhanden sind oder nicht, festzulegen. Ich habe Navigation, die die Daten ändern wird, und lädt die Sammlungsansicht neu (Aufruf von [self.collectionView reloadData] ). Aus irgendeinem Grund bekomme ich sehr seltsame Ergebnisse. Erstens, manchmal, wenn ich die Eigenschaft einstelle, erscheint sie über den collectionView-Zellen und verdeckt sie. Zweitens, wenn ich versuche, die Eigenschaft zu ändern, ändert es sich nicht auf dem Bildschirm. Das macht mich verrückt! Es schien so einfach zu implementieren!

Also im Code. In viewDidLoad für UICollectionViewController

%Vor%

Die Methode "Abschnitte laden" lädt nur die Daten, die ich für die Sammlungsansicht verwende, und ruft dann eine Methode zum Festlegen der Hintergrundansicht auf, die entscheidet, welche Ansicht hinzugefügt werden soll, wenn Daten wie folgt vorhanden sind:

%Vor%

Wenn nun die Ansicht geladen wird, wenn keine Daten vorhanden sind und keine Zellen zum Anzeigen des Hintergrundbildes vorhanden sind, wird das Bild korrekt angezeigt. Ich ändere dann Daten und ich habe jetzt einige Zellen zu zeigen, die setupBackgroundImage wird aufgerufen, und ich kann überprüfen, dass die backgroundImage-Eigenschaft auf Null (ich habe hier sogar gebrochen und überprüft den Wert und es ist Null) gesetzt. ABER das Hintergrundbild ist immer noch sichtbar.

Zusätzlich, wenn ich das nil zu einem anderen Bild ändere, wird dieses neue Bild nie gezeigt.

Und noch seltsamer. Wenn einige Zellen angezeigt werden und ein Hintergrundbild erstellt wird, wird dieses Bild sauber hinter den Zellen angezeigt. Wenn ich dann Daten mit einem neuen Datensatz neu lade, wird das Bild vor den Zellen angezeigt und verdunkelt sie. Ich habe keine Ahnung, wie das passiert, denn dann sollte die Hintergrundansicht hinter allen anderen stehen.

Weiß jemand, warum das passiert? Wird es irgendwo zwischengespeichert? oder mache ich gerade etwas Dummes? Ich bin hier völlig am Ende - habe mehr Zeit darauf verwendet, als das benutzerdefinierte Layout zu schreiben, das es verwendet!

    
SimonB 17.05.2013, 08:15
quelle

4 Antworten

0

Ok, ich habe eine Lösung für mein spezifisches Problem gefunden, obwohl ich immer noch nicht verstehe, warum ich das merkwürdige Verhalten in meiner Frage bekomme, zumindest erlaubt es mir so, das Hintergrundbild zu ändern.

Grundsätzlich erstelle ich eine Eigenschaft, die ein UIImageView enthält und setze dann UICollectionView auf diese Eigenschaft. Ich kann dann das Bild in der Bildansicht über die Eigenschaft ändern, die ich gespeichert habe.

%Vor%

Dabei ist self.backgroundImageView die Eigenschaft, die ich definiert habe, um einen Verweis auf die Hintergrundansicht beizubehalten.

Wenn jemand irgendeinen Einblick in das seltsame Verhalten hat, das in der Frage erwähnt wird, wäre ich wirklich interessiert, es zu hören!

    
SimonB 17.05.2013, 10:26
quelle
3

Versuchen Sie es

%Vor%     
Lithu T.V 17.05.2013 09:32
quelle
1

Wie in diesem Beitrag erwähnt UICollectionView's backgroundView-Eigenschaft ist schrecklich gebrochen

kann man eine bittere Lesung haben, wenn man cmd + auf UICollectionViewCell Klasse klickt.

%Vor%

Ihr neuer wird unter dem alten eingefügt. habe gerade meine letzte Stunde damit verbracht, zu debuggen und viel zu fluchen, um herauszufinden, was nicht funktioniert.

verwende einfach removeFromSuperview

    
ha100 27.11.2015 11:25
quelle
0

Ich weiß nicht wirklich, ob das zusammenhängt, aber ich habe das nach einer langen Suche gefunden. Hoffe das spart jemand einige Zeit.

Wie bei einer UICollectionView hat eine UITableView eine Hintergrundansicht, die vor AutoLayout erstellt wurde. Wenn Sie autoLayout verwenden, sollten Sie sicherstellen, dass der backgroundView einen Rahmen hat. Sonst wird es verschwinden. In Ihrer Zellen-Unterklasse können Sie Folgendes tun:

%Vor%     
doozMen 08.01.2015 13:28
quelle

Tags und Links