Nach dem Update auf Xcode 6.1 Beta 2 beim Ausführen meiner App, die Tabellenansichtszellen enthält, sagt der Debug-Assistent:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Früher, als ich Xcode 5 für dieses Projekt verwendet habe, habe ich einige Fehler erhalten, aber diese sind seit dem Upgrade verschwunden. Ich habe jetzt keine weiteren Fehler oder Warnungen. Ich habe bereits versucht, die Größe aller Tabellenansichtszellen anzupassen, und habe auch versucht, die Standardhöhe zu verwenden, erhalte jedoch immer noch die gleiche Warnung:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Ich habe auch alle ähnlichen Themen zu diesem Thema gelesen, aber keine ihrer Lösungen hilft. Wenn ich die App mit dem Simulator teste, läuft die App einwandfrei, außer dass die Bilder, die sich in den tableView-Zellen befinden sollen, nicht vorhanden sind.
quelle
Antworten:
Drei Dinge haben es bisher geschafft, diese Warnung zum Schweigen zu bringen. Sie können das für Sie bequemste abholen. Nichts hübsches.
So richten Sie die Höhe der Standardzelle in viewDidLoad ein
Gehen Sie zum Storyboard und ändern Sie die Zeilenhöhe in Ihrer Tabellenansicht auf etwas anderes als 44.
So implementieren Sie die Delegatmethode heightForRowAtIndexPath von tableview
Seltsam.
quelle
self.tableView.rowHeight = 44;
die falsche eingefügt . Der Fehler ging weg! dankeIn den Tabellenansichten von iOS8 stoßen Sie auf den Nebeneffekt einer fantastischen neuen Funktion: Automatische Zeilenhöhen.
In iOS 7 hatten Sie entweder Zeilen mit einer festen Größe (festgelegt mit
tableView.rowHeight
), oder Sie haben Code geschrieben, um die Höhe Ihrer Zellen zu berechnen, und Sie haben diesen zurückgegebentableView:heightForRowAtIndexPath
. Das Schreiben von Code zur Berechnung der Höhe einer Zelle kann sehr komplex sein, wenn Sie zahlreiche Ansichten in Ihrer Zelle hatten und unterschiedliche Höhen bei unterschiedlichen Schriftgrößen zu berücksichtigen hatten. Fügen Sie in Dynamic Type und der Prozess war ein Schmerz im Arsch.In iOS 8 können Sie die oben genannten Schritte weiterhin ausführen. Jetzt kann die Höhe der Zeilen von iOS bestimmt werden, sofern Sie den Inhalt Ihrer Zelle mithilfe des automatischen Layouts konfiguriert haben. Dies ist ein großer Vorteil für Entwickler, da sich Ihre Benutzeroberfläche an die neue Größe anpassen kann, wenn sich die dynamische Schriftgröße ändert oder der Benutzer die Textgröße mithilfe der Eingabehilfeneinstellungen ändert. Wenn Sie über ein UILabel verfügen, das mehrere Textzeilen enthalten kann, kann Ihre Zelle jetzt vergrößert werden, um diese zu berücksichtigen, wenn die Zellen dies benötigen, und verkleinert werden, wenn dies nicht der Fall ist, sodass keine unnötigen Leerzeichen vorhanden sind.
Die angezeigte Warnmeldung weist Sie darauf hin, dass in Ihrer Zelle nicht genügend Einschränkungen für das automatische Layout vorhanden sind, um die Tabellenansicht über die Höhe der Zelle zu informieren.
Um die dynamische Zellenhöhe zu verwenden, die zusammen mit den bereits von anderen Postern erwähnten Techniken diese Meldung beseitigt, müssen Sie sicherstellen, dass Ihre Zelle über ausreichende Einschränkungen verfügt, um die UI-Elemente an den oberen und unteren Rand der Zelle zu binden . Wenn Sie zuvor das automatische Layout verwendet haben, sind Sie wahrscheinlich daran gewöhnt, Einschränkungen für Top + Leading festzulegen. Für die dynamische Zeilenhöhe sind jedoch auch Bottom-Einschränkungen erforderlich.
Der Layout-Durchlauf funktioniert so, dass er unmittelbar vor der Anzeige einer Zelle auf dem Bildschirm just-in-time ausgeführt wird:
Die Abmessungen für Inhalte mit Eigengrößen werden berechnet. Dies umfasst UILabels und UIImageViews, deren Abmessungen auf dem Text bzw. den darin enthaltenen UIImages basieren. In beiden Ansichten wird ihre Breite als bekannt angesehen (weil Sie Einschränkungen für Hinter- / Vorderkanten festgelegt oder explizite Breiten festgelegt oder horizontale Einschränkungen verwendet haben, die schließlich eine Breite von Seite zu Seite anzeigen). Angenommen, ein Etikett enthält einen Textabschnitt ("Anzahl der Zeilen" wird auf 0 gesetzt, damit es automatisch umbrochen wird). Es kann nur einen Durchmesser von 310 Punkten haben, sodass bei der aktuellen Schriftgröße eine Höhe von 120pt festgelegt wird.
Die Benutzeroberfläche richtet sich nach Ihren Positionierungsbeschränkungen. Am unteren Rand des Etiketts befindet sich eine Einschränkung, die mit dem unteren Rand der Zelle verbunden ist. Da das Etikett auf 120 Punkte angewachsen ist und durch die Einschränkung an den unteren Rand der Zelle gebunden ist, muss es die Zelle "nach unten" drücken (wodurch die Höhe der Zelle erhöht wird), um die Einschränkung zu erfüllen, die "unten von" lautet Das Etikett ist immer der Standardabstand vom unteren Rand der Zelle.
Die von Ihnen gemeldete Fehlermeldung tritt auf, wenn diese untere Einschränkung fehlt. In diesem Fall gibt es nichts, was den unteren Teil der Zelle vom oberen Rand der Zelle wegschieben könnte. Dies ist die Mehrdeutigkeit, die gemeldet wird: Es gibt nichts, von dem aus der untere Rand verschoben werden kann Oben bricht die Zelle zusammen. Das automatische Layout erkennt dies jedoch ebenfalls und verwendet wieder die Standardzeilenhöhe.
Wenn Sie die auf automatischem Layout basierenden dynamischen Zeilenhöhen von iOS 8 implementieren, sollten Sie diese implementieren, um eine abgerundete Antwort zu erhalten
tableView:estimatedHeightForRowAtIndexPath:
. Diese Schätzmethode kann grobe Werte für Ihre Zellen verwenden und wird aufgerufen, wenn die Tabellenansicht zum ersten Mal geladen wird. Es hilft UIKit beim Zeichnen von Dingen wie der Bildlaufleiste, die nur gezeichnet werden können, wenn die Tabellenansicht weiß, durch wie viel Inhalt sie scrollen kann, aber keine absolut genauen Größen benötigt, da es sich nur um eine Bildlaufleiste handelt. Auf diese Weise kann die Berechnung der tatsächlichen Zeilenhöhe bis zu dem Zeitpunkt verschoben werden, an dem die Zelle benötigt wird. Dies ist weniger rechenintensiv und ermöglicht eine schnellere Darstellung Ihrer UITableView.quelle
Ich hatte dieses Problem, nachdem ich eine benutzerdefinierte
UITableViewCell
Datei erstellt und meine Unteransichten anstelle der Zelle zur Zelle hinzugefügt hattecontentView
.quelle
Um dies ohne eine programmatische Methode zu beheben, passen Sie die Zeilenhöhe der Tabellenansicht im Größeninspektor des Storyboards an.
quelle
Dies ist ein Autolayout-Problem. Stellen Sie sicher, dass Ihre Unteransichten alle Einschränkungen aufweisen. Für mich fehlte die unterste Einschränkung für die Titelbezeichnung in der Zelle. Als ich das hinzufügte, verschwand die Warnung und alles zeigte sich perfekt.
quelle
Aktivieren Sie einfach Self-Sizing Table View Cells
&
UITableViewCell
Stellen Sie sicher, dass Sie Einschränkungen auf allen Seiten von as- hinzugefügt haben.Beispiel Link 1
Beispiel Link 2
quelle
UITableViewAutomaticDimension
wurde umbenannt inUITableView.automaticDimension
Wenn Sie eine statische oder dynamische Zelle verwenden, fügen Sie der Tabellenansicht in der Inspektortabelle einfach eine Zeilenhöhe hinzu und deaktivieren Sie die automatische Option auf der rechten Seite der Zeilenhöhe. Dadurch wird diese Warnung nicht mehr angezeigt.
quelle
Ich habe heute diese Warnung erhalten. Hier ist, was es für mich verschwinden ließ (im Interface Builder)
1.Stellen Sie das Zeilenhöhenfeld für die Tabellenansicht auf einen anderen Wert als 44 ein. 2 Setzen Sie das Zeilenhöhenfeld für die tableView-Zelle auf einen anderen Wert als 44
Ich musste keine Änderungen am Code vornehmen
quelle
In meinem Fall habe ich die Zelle programmgesteuert erstellt und immer wieder diesen Fehler erhalten.
Ich habe die Unteransichten und Einschränkungen in der Methode der
UITableViewCell
'init
wie folgt hinzugefügt :Ich habe das Problem gelöst, indem ich sie
contentView
stattdessen zu den Zellen hinzugefügt habe :quelle
contentView
, nichtUITableViewCell
direkt zum hinzu.Setzen Sie die geschätzte Zeilenhöhe auf Null und die Warnung verschwindet:
quelle
Auch ich habe diese Warnung beim Wechsel zu Xcode 6 GM erlebt. Ich erhielt die Warnung erst, als ich das Gerät wieder in seine ursprüngliche Position drehte.
Ich verwende benutzerdefinierte UITableViewCells. Die Storyboard-Tabellenansicht ist auf meine benutzerdefinierte Größe eingestellt (in meinem Fall 100,0). Während die Tabellenzellen wie in früheren Versionen ordnungsgemäß gerendert wurden, gefiel mir keine Warnmeldung.
Zusätzlich zu den oben genannten Ideen habe ich dies hinzugefügt
Bildschirm rendert ... reagiert auf Rotation und keine Warnmeldungen mehr.
quelle
In xcode 6.0.1 hatte ich diese Warnungen unter Angabe der Zeilenhöhe entfernt, indem ich:
quelle
Wenn Sie eine benutzerdefinierte tableViewCell für tableView erstellt haben, stellen Sie sicher, dass Sie Ihren Zellen sowohl untere als auch obere Einschränkungen zugewiesen haben. Sie können diese Meldung auch erhalten, wenn Ihre Unteransichten in benutzerdefinierten Zellen in der Mitte Y ausgerichtet sind , wodurch keine Fehlermeldung angezeigt wird, sondern Probleme auftreten bis zur Identifizierung der Zeilenhöhe für die Tabellenansicht wir die wie in Bild I angegeben haben, haben wir hier sowohl die oberen als auch die unteren Einschränkungen
Wenn Sie eine benutzerdefinierte Zelle für tableView erstellen, müssen Sie bestimmte Zeilenhöhen- oder obere und untere Einschränkungen für die Unteransichten Ihrer benutzerdefinierten Zelle in der Zelle festlegen (z. B. Beschriftung in einer benutzerdefinierten Zelle wie im folgenden Bild).
Wenn dies jedoch nicht funktioniert, können Sie versuchen, die Zeilenhöhe für Ihre Zelle festzulegen, anstatt wie in diesem Bild automatisch zu arbeiten
Wenn Sie dieses automatische Häkchen deaktivieren, müssen Sie jedoch die Zeilengröße für Änderungen programmgesteuert anpassen, die automatisch hätten durchgeführt werden können
quelle
Stellen Sie im Storyboard das
cell
Row height
Feld mit dem gleichen Wert wieRow height
in eintableView
(beide mit dem gleichen Wert arbeiteten für mich).Wenn Sie
heightForRowAtIndexPath
Ihrem Code eine Funktion hinzufügen, kann dies zu Leistungsproblemen führen, da diese für jede Zelle aufgerufen wird. Seien Sie also vorsichtig.quelle
Möglicherweise wird diese Meldung auch angezeigt, wenn Ihre einzigen Einschränkungen so festgelegt sind, dass alle Elemente vertikal ausgerichtet werden und Sie keine Höhe für die Zelle angegeben haben / möchten. Wenn Sie eine obere / untere Einschränkung für das Element festlegen, wird die Warnung ausgeblendet.
quelle
Ich hatte dieses Problem, als meine Beschriftungen und Ansichten in der benutzerdefinierten tableViewCell auf die customCell und nicht auf deren Inhaltsansicht beschränkt waren. Als ich die Einschränkungen löschte und sie mit der Inhaltsansicht der Zellen verband, war das Problem gelöst.
quelle
Ich hatte die gleiche Fehlermeldung. Stellen Sie sicher, dass alle Ihre Steckdosen gültig sind, z. B. Einschränkungen für Tabellenansicht und Tabellenansicht
quelle
Wenn Sie eine dynamische Höhenberechnung durchführen,
quelle
Ich habe auch ein ähnliches Problem für benutzerdefinierte Tabellenansichtszellen mit dynamischer Zeilenhöhe. Die dynamische Höhe wurde nicht reflektiert und erhielt dieselbe Warnung in der Konsole. Die Lösung besteht darin, der Zelle anstelle von contentView Unteransichten hinzuzufügen. Übrigens habe ich programmatisch Unteransichten erstellt.
quelle
Ich habe dieses Problem bei
TableViewCell
s, bei denen die Einschränkungen für die Initialisierung festgelegt sind, der Inhalt der Zelle jedoch anschließend geladen wird. Dies bedeutet, dass die Autolayout-Engine die Höhe nicht bestimmen kann. Die anderen Lösungen hier funktionieren nicht, weil ich die Höhe der Zelle braucheUITableView.automaticDimension
.Ich habe der Zelle gerade eine zusätzliche Einschränkung hinzugefügt:
quelle
Ich habe diese Warnung heute erhalten. Ich habe meinem Code nur eine zusätzliche Zeile hinzugefügt
Fügen Sie diese Codezeile in das Feld ein
und der endgültige Code sieht aus wie
Dieser Code erhöht die Zellenhöhe der Tabellenzeile auf 200, die Standardhöhe ist 44
quelle
Ich habe den gleichen Fehler, aufgrund dieser Zeile wurde dieser Fehler angezeigt.
self.layer.backgroundColor = UIColor (weiß: 1, alpha: 0,2) as! CGColor
Ich ändere einfach die Zeile wie folgt, um den Fehler zu beheben
self.layer.backgroundColor = UIColor (weiß: 1, alpha: 0,2) .cgColor
quelle