Autolayout wird in Custom UITableViewCell ignoriert

89

Obwohl für alle Elemente Einschränkungen festgelegt wurden, einschließlich der vertikalen, die für die Berechnung der Höhe der Zelle erforderlich sind, scheint das automatische Layout ignoriert zu werden: Alle Zellen werden gequetscht.

Hier ist ein Screenshot des Ergebnisses und der Einschränkungen im Storyboard. Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

In der VC, die die tableView enthält, ist hier der Code in viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Wenn Sie die zweite Zeile auskommentieren, erhalten Sie Zellen mit einer Höhe von 120,0, aber Autolayout wird ebenfalls ignoriert.

Vielen Dank


Aktualisieren

Um die Benutzeroberfläche zu vereinfachen, habe ich ein einzelnes Etikett mit folgenden Einschränkungen hinterlassen:

  • Führender Raum zur Übersicht
  • Top Platz zum Überwachen
  • Feste Breite und Höhe (100 & 100)
  • Unterer Raum zum Containerrand, um sicherzustellen, dass die Zelle alle vertikalen Einschränkungen hat, um ihre Höhe zu bestimmen

Und mit dieser vereinfachten Oberfläche wird das automatische Layout immer noch nicht berücksichtigt, was mich darauf hinweist, dass das Problem nicht auf schlecht eingestellte Einschränkungen zurückzuführen ist.

Im Größeninspektor wird die Zeilenhöhe auf 120 festgelegt und Benutzerdefiniert aktiviert. Die Zelle hat die richtige benutzerdefinierte Klasse, die Kennung für die Wiederverwendung von Zellen ist korrekt.


Update: Lösung gefunden

Dies war ein einfacher Fehler, siehe meine Antwort unten.

Kqtr
quelle
Überprüfen Sie Ihr Debug-Terminal. Gibt es dort NSLayoutConstraint-Protokolle, die darauf hinweisen, dass etwas nicht wie erwartet funktioniert?
Matthew Hallatt
Im Debug-Terminal @MatthewHallatt wird nichts angezeigt, danke.
Kqtr
@Kqtr versuchen Sie, diese beiden Zeilen zu kommentieren, und führen Sie sie dann einmal normal aus, um zu überprüfen, ob sich etwas geändert hat.
Tushar Sharma
@TusharSharma Das Auskommentieren der beiden Zeilen hat den gleichen Effekt wie das Auskommentieren nur der Zeile rowHeight: Die Zelle hat eine Höhe von 120,0, aber das automatische Layout funktioniert nicht.
Kqtr
1
Zeigt der Interface Builder Einschränkungen als fehlend oder mehrdeutig an? Überprüfen Sie das kleine gelbe oder rote Ausrufezeichen.
Matthew Hallatt

Antworten:

241

Das automatische Layout wurde ignoriert, da sowohl die Prototypzelle als auch die UIView der Zelle in IB die benutzerdefinierte Zellklasse erhalten hatten.

Das Zurücksetzen der UIView auf die UIView-Klasse löste das Problem.

nur um über klar zu sein

Kqtr
quelle
Ich war stundenlang in diesem Problem gefangen und das löst es, danke!
Candidev
-3

Ich denke, das Problem ist, dass Sie implementieren:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Sie müssen diese Funktion entfernen, damit die Tabellenansicht ihre automatische Höhe für Zellen berechnet.

Jaafar Barek
quelle
Danke, ich überschreibe es leider nicht: Ich habe eigentlich nicht einmal einen Delegaten für diese tableView, nur eine Datenquelle.
Kqtr
Haben Sie die Textansichtsbeschränkungen auf alle for-Kanten der Zelle festgelegt? Und haben Sie das Scrollen in textView deaktiviert?
Jaafar Barek
Die mehrzeilige Beschriftung (0 Zeilen) unterliegt Einschränkungen für 1) vertikalen Abstand mit der Zahl links 2) oberen Bereich für die Übersicht 3) nachgestellten Bereich für die Übersicht und 4) unteren Bereich für die Beschriftung "Gefragt von".
Kqtr