Hat jemand eine Idee, wie man das debuggt?
Warnung nur einmal: Es wurde ein Fall festgestellt, in dem Einschränkungen mehrdeutig eine Höhe von Null für die Inhaltsansicht einer Tabellenansichtszelle vorschlagen. Wir betrachten den Zusammenbruch als unbeabsichtigt und verwenden stattdessen die Standardhöhe.
Die Zeilen haben eine feste Höhe wie von festgelegt
- (CGFloat)tableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 34.0;
}
Und alle constraints
scheinen glücklich zu sein ...
Sie können auch vertikale Einschränkungen von oben nach unten in der Inhaltsansicht hinzufügen. Dies wird das Autolayout glücklich machen (weil er jetzt weiß, wie man die Höhe der Zelle selbst berechnet).
quelle
Wenn Sie AutoLayout-Einschränkungen und UITableViewAutomaticDimension verwenden, ist dieser Fehler kein fehlerhaftes Problem, das durch Überschreiben Ihrer Höhe im Code verworfen werden muss. Dies bedeutet, dass das automatische Ermitteln der Zellenhöhe nicht funktioniert, da Sie nicht über die erforderlichen vertikalen Einschränkungen verfügen.
Wenn Sie wie ich sind und diesen Fehler erhalten haben und Hilfe benötigen, um festzustellen, welche Zelle den Fehler ausgelöst hat, können Sie die folgende Zeile unmittelbar vor der Rückgabe Ihrer Methode "heightforRowAtIndexPath" hinzufügen.
Dadurch wird eine lange Liste von Abschnitten und Zeilen ausgedruckt. Der Fehler wird jedoch unmittelbar nach der bestimmten Zelle angezeigt, die den Fehler verursacht, und Sie können schnell feststellen, welche Zelle das Problem verursacht, und Ihre Einschränkungen entsprechend beheben. Dies ist besonders hilfreich für statische Zellen. Das Überschreiben der Höhe mit einer manuell eingegebenen Zahl funktioniert, wenn Sie nicht AutoLayout und automatische Zellenhöhen verwenden, deaktiviert diese Funktionen jedoch im Wesentlichen. Dies ist eine sehr schlechte Lösung, wenn Sie versuchen, sie zu verwenden.
Wenn Sie zuvor nicht die Methode 'heightForRowAtIndexPath' verwendet haben, diesen Fehler jedoch debuggen möchten, ohne die Einstellung UITableViewAutomaticDimension rückgängig zu machen, fügen Sie dies einfach Ihrem Code hinzu:
quelle
In XCode 6.1 scheint ein Fehler aufgetreten zu sein, der dieses Problem verursacht, wenn das automatische Layout verwendet wird und Sie nicht für jede Tabellenansichtszelle einen Wert für die Zeilenhöhe angeben, sondern den "Standard" -Wert beibehalten. Durch einfaches Aktivieren des Kontrollkästchens "Benutzerdefiniert" neben der Zeilenhöhe für jede Zelle wird die Warnung ausgeblendet.
quelle
Ja, Sie erhalten alle Einschränkungen "glücklich", auch wenn Sie nur horizontale Einschränkungen für Elemente in der Zelle der Tabellenansicht haben. Ich hatte das gleiche Problem. Sie müssen auch vertikale Einschränkungen hinzufügen. Wenn Sie dies tun, verschwindet diese Warnung.
quelle
Die Einschränkungen können für den Zweck des Layouts erfüllt sein, für den Zweck der automatischen Zeilenhöhe jedoch nicht. Ein fröhliches Layout würde bedeuten, dass der Inhalt ohne Mehrdeutigkeit angelegt werden kann. Das würde die Prüfungen in Interface Builder erfüllen.
Ein zufriedenstellendes Layout für die automatische Zeilenhöhe würde bedeuten, dass Sie zusätzlich zu den oben genannten auch Einschränkungen für den unteren Rand der Zelle einschließen.
Mehr hier: Es wurde ein Fall festgestellt, in dem Einschränkungen mehrdeutig eine Höhe von Null vorschlagen
quelle
Ich habe die Zeilenhöhe 43 (oder <> 44) im Größeninspektor der Tabellenansicht verwendet, und der Fehler ist verschwunden. Mit 44 bekomme ich den Fehler. Xcode Version 6.0.1.
- Diese Antwort wurde von einem Moderator entfernt, bitte nicht, sie behebt das Problem. Dies löst das Problem für mich und kann es auch für andere tun. Könnten Sie so freundlich sein, es nicht wieder zu löschen?
quelle
Ich konnte die Warnung nicht entfernen, aber damit Einschränkungen funktionieren, habe ich die neue Tabellenansichtseigenschaft für iOS8
estimatedRowHeight
auf die feste Höhe festgelegt und dieheightForRowAtIndexPath
Implementierung entfernt .quelle
Wenn Sie diese Warnung erhalten, liegt dies höchstwahrscheinlich daran, dass Sie das automatische Layout verwenden und Ihre Zellen keine Einschränkungen enthalten.
Sie sollten entweder die Verwendung des automatischen Layouts beenden oder Einschränkungen implementieren, die die Höhe der Zellen eindeutig definieren.
Sie können das automatische Layout im Interface Builder deaktivieren, indem Sie die Option "Autolayout verwenden" im Dateiinspektor rechts deaktivieren.
Wenn Sie das automatische Layout verwenden und die Höhe Ihrer Zellen festgelegt ist, sollte die Implementierung der entsprechenden Einschränkungen einfach sein. Fügen Sie einfach Höhenbeschränkungen für Unteransichten der Inhaltsansicht der Zelle hinzu und implementieren Sie vertikale Platzbeschränkungen zwischen den Unteransichten sowie zwischen den Unteransichten und der Inhaltsansicht. Wenn Ihre Zelle beispielsweise eine Bezeichnung enthält, funktioniert dies:
Vertikale Einschränkungen
Horizontale Einschränkungen
quelle
Mit AutoLayout können Sie die richtige Höhe für Sie berechnen. Hier ist ein schöner Beitrag über Dynamic Cell Height unter iOS 8: http://natashatherobot.com/ios-8-self-sizing-table-view-cells-with-dynamic-type/
quelle
Beim Erzwingen einer Rücklaufhöhe in Swift wurde mein Problem behoben:
quelle
Für eine Moor-Standardkorrektur keine Einschränkungen, keine Schätzhöhen oder Überentwicklung des Problems. Ich habe ein Standardprojekt erstellt, die Tabellenansicht verkabelt, aber vergessen, den Höhendelegierten in den Ansichtscontroller einzufügen . Um diese Warnung einfach verschwinden zu lassen, benötigen Sie diese.
Im View Controller Ihrer Tabelle.
quelle
Ich habe eine mapView in uitableviewcell verwendet. Ich habe die Höhe der Kartenansicht auf 1/3 der Bildschirmgröße des Geräts geändert. Ich habe den gleichen Fehler bekommen. Ich habe den Fehler behoben, indem ich der Inhaltsansicht der uitableviewcell fehlende Einschränkungen hinzugefügt habe.
1) Deaktivieren Sie die contentView-Einschränkungen.
2) Setzen Sie Reset auf Vorgeschlagene Konstanten für contentView.
3) Fügen Sie fehlende Einschränkungen hinzu - falls vorhanden
4) Wir stellen sicher, dass die Inhaltsansicht alle erforderlichen Einschränkungen aufweist.
quelle
In meinem Fall liegt es daran, dass ich die Zelle mit xib entwerfe und vergesse, diese xib-Datei zum Ziel hinzuzufügen.
Nachdem ich diese xib-Datei zum Ziel hinzugefügt habe, ist das Problem behoben
quelle
Während die Antworten auf dieser Seite, in denen das Hinzufügen von Höhenbeschränkungen oder das manuelle Zurückgeben von rowHeights wie 44 in heightForRowAtIndexPath erläutert wird, dazu führen, dass die Warnung nicht mehr angezeigt wird, sind sie überflüssig, da dies ein Fehler in Xcode ist , der in mindestens Version 6.3.2 (6D2105) sichtbar ist.
Wenn Sie in viewDidLoad einen Haltepunkt festlegen, wird self.tableView.rowHeight = -1 (UITableViewAutomaticDimension) angezeigt, selbst wenn Sie im Storyboard eine Zeilenhöhe von 44 angeben. Dies liegt daran, dass Apple fälschlicherweise davon ausgeht, dass Sie dynamische Zeilenhöhen wünschen, wenn Sie die Zeilenhöhe bei 44 belassen, da Sie kein Flag zur Angabe Ihrer Präferenz erhalten haben.
Hier sind einige mögliche Lösungen und ihre Ergebnisse:
Stellen Sie die Zeilenhöhe im Storyboard auf 43 oder 45 ein (funktioniert).
Geben Sie manuell eine Höhe von 44 in heightForRowAtIndexPath zurück (funktioniert).
Fügen Sie Höhenbeschränkungen zwischen den Elementen der UITableViewCell und ihrer contentView hinzu (funktioniert).
Leider müssen Sie bei diesen Lösungen entweder Ihr Design ändern, unnötige Einschränkungen hinzufügen oder unnötigen Code hinzufügen, um einen Fehler zu umgehen. Ich habe versucht (was ich dachte) die einfachste Lösung:
Ich wollte wirklich eine reine Storyboard-Lösung dafür, also habe ich endlich versucht:

Diese Fehler sind in der iOS-Entwicklung nur allzu häufig und zwingen Entwickler dazu, übermäßig viel Zeit damit zu verbringen, die Auswirkungen abzuwägen, wie sich ihre Lösungen auf lange Sicht auf die Wartbarkeit auswirken.
Da es so schwer ist, eine konzeptionell korrekte Lösung zu finden, die wartbar ist und nicht verschleiert zu sein scheint, und davon auszugehen, dass Apple den Fehler beheben wird und 44 auf absehbare Zeit die Standardzeilenhöhe sein wird, dann die Einschränkung oder benutzerdefinierte Laufzeitattributlösungen sind wahrscheinlich am wartbarsten.
quelle
Ich denke, hier passieren zwei wichtige Dinge.
1) Es ist super einfach, die Einschränkungen falsch zu machen, wenn Sie Strg + Ziehen drücken. Überprüfen Sie also noch einmal, ob Sie es richtig gemacht haben. Verwenden Sie am besten das Fach auf der linken Seite des Bildschirms, um diese Einschränkungen zu zeichnen.
2) Verwenden Sie die Delegate-Methode, anstatt die geschätzte Zeilenhöhe in ViewDidLoad oder an einer anderen Stelle anzugeben
Dies hat das Problem für mich sofort behoben.
quelle
Ich habe diesen Fehler auch bei der Verwendung von universellen Storyboards oder Xibs gesehen. Wenn Sie es versäumen, die richtigen Einschränkungen für die Größenklasse Any x Any anzugeben, wird dieser Fehler angezeigt.
Apple scheint dies für iOS9 behoben zu haben. Der Fehler ist bei mir nur auf 8.4 aufgetreten.
quelle
Ich ging tagelang zwischen diesem Fehler und einem anderen Fehler hin und her, bei dem Einschränkungen erstellt wurden (keine Ahnung, wo), die mit den von mir gewünschten Einschränkungen in Konflikt standen. Ich hatte es sogar in einem Fall funktionieren lassen, in dem jede sichtbare Eigenschaft mit der anderen identisch war. Die einzige Lösung, die ich gefunden habe, war, atomar zu arbeiten - eine völlig neue Datei mit xib zu erstellen und erneut mit dem Kopieren und Einfügen des alten Codes zu beginnen. Es ist vielleicht nicht die beste Lösung, aber manchmal, wenn das Problem nicht sichtbar ist, gibt es wenig anderes zu tun. Zumindest ist Atomic ein guter Weg, um zu überprüfen, was los ist.
quelle