UICollectionViewCell Automatisches Layout

8

Ich habe eine einfache benutzerdefinierte UICollectionViewCell in meinem Storyboard erstellt, ich habe dies auch programmatisch mit identischen Ergebnissen gemacht.

Es hat eine singuläre UIImageView und zwei UILabels , wie folgt:

%Vor%

Das Bild ist auf der linken Seite, dann rechts davon sind zwei Beschriftungen über und unter einander.

Jeder ist mit 10 Pixellücken beabstandet und alle auf der Y-Achse der Zellen zentriert. Die Labels haben dann eine Konstante, um sie von der Mitte (nach oben und unten) zu versetzen.

Das Bild hat eine feste Höhe und Breite von 44px und die Etiketten haben eine feste Höhe von 20px (mit flexibler Breite).

Die Einschränkungen funktionieren wie erwartet und brechen niemals die App, aber sie spucken immer diese nervigen Konsolen-Log-Infos aus, da sie anscheinend kaputt sind.

Wenn ich diese Zeile zu meiner Unterklasse UICollectionViewCell hinzufüge, splittern die Constraints nicht mehr und spucken Konsolenfehler aus, aber sie sind auf dem Bildschirm total kaputt.

%Vor%

Irgendwelche Hinweise? Bitte helfen Sie, es scheint so unlogisch!

Hier ist der Konsolenfehlercode:

%Vor%     
Josh Kahane 25.10.2014, 17:29
quelle

3 Antworten

21

Ich habe auch dieses Problem gesehen und es durch Hinzufügen dieses in der UICollectionViewCell-Unterklasse behoben:

SWIFT 3

%Vor%

OBJC

%Vor%

Xcode 6.1 iOS 8.0.2, 8.1

Sie können diese Antwort auch überprüfen: UICollectionView Cell + UiLabel mit AutoLayout

    
Alexander Polovinka 07.11.2014 21:34
quelle
1

Gleich nach der Erstellung sind Zelle und Zelle in der Inhaltsansicht 50x50 (egal, welche Größe durch das Auflistungslayout festgelegt wird).

Auto-Layout funktioniert zum ersten Mal, nachdem die Zelle die richtige Größe erreicht hat, aber die Inhaltsansicht ist immer noch 50x50. Wahrscheinlich ist es iOS 8 Problem. Anderes Layout funktioniert mit korrekter Inhaltsansichtsgröße. So fein sehen Sie ein korrektes Layout, aber Protokollausgabe ist übersät.

Setzen Sie einfach in watchFromNib einen Frame größer als die minimale Zellengröße auf die Inhaltsansicht für iOS 8.

In Ihrem Fall

%Vor%

minimale Zellenbreite ist 74 - Summe aller expliziten Konstanten.

%Vor%

Hatte das gleiche Problem, aber die Einstellung von aoresizeMask hat nicht funktioniert. Und das Setzen des Frames löste das Problem.

    
user1765464 05.02.2015 12:02
quelle
0

Ich hatte dieses Problem auch. Hinzufügen:

%Vor%

hat das Layout meiner Sichtweise durchbrochen. In meinem Fall musste ich ein paar Layout-Einschränkungen anpassen, um den Blick zurück zu bekommen, wie ich es wollte. In einem Fall wurde ein Bild nicht vertikal zentriert, da die Höhe der Zelle nicht ausreichend eingeschränkt war. (Dort fügte ich dem untersten Element in der Zelle eine untere Einschränkung hinzu). In einem anderen Fall war ein anderes Bild (in einer anderen Zelle) nicht zentriert und ich musste eine andere Randbedingungsänderung vornehmen. Ich habe eine Höhenzwangsbedingung für dieses Bild hinzugefügt und eine obere Einschränkung entfernt, wodurch das Problem gelöst wurde.

Ich hatte auch Probleme in diesen beiden Zellen mit UILabel s, die nicht mehr auf die Breite der Collection-View-Zelle beschränkt waren. Das heißt, wenn der Text zu lang war, würde der Text nicht gut mit "..." innerhalb der Zelle ablaufen, er würde einfach über das Ende der Zelle hinauslaufen. In beiden Fällen konnte ich nur eine Beschränkung mit fester Breite auf die Beschriftung anwenden, wodurch die Breite der Beschriftung nicht adaptiv wurde. Es gab zuvor nachgestellte Einschränkungen, die vor dem Festlegen von translatesAutoresizingMaskIntoConstraints auf NO funktionierten.

    
Chris Prince 04.08.2016 17:48
quelle