Ich habe den neuen Xcode heruntergeladen und in Interface Builder habe ich eine Menge Probleme mit Warnungen, die Folgendes sagen:
Feste Breitenbeschränkungen können zu Beschneidungen führen
Es sieht aus wie das:
Ich habe Lokalisierung für mehrere Sprachen und verstehe die Warnung, dass sich in einer anderen Sprache die Größe eines Labels ändern kann, aber meine App hat dieses Problem nicht. Ich habe es gestern in Xcode 8 getestet und getestet, es war in Ordnung. Ich möchte nicht Stunden und Stunden damit verbringen, sinnlose neue Einschränkungen hinzuzufügen.
Irgendwelche Lösungsvorschläge?
Ich erhielt die gleichen Warnungen, sogar ohne mehrere Sprachen in meiner App, was mich veranlasste, herauszufinden, was wirklich vor sich ging. . .
Hier gibt es ein paar verschiedene Dinge. Ich war in der Lage, Stummschaltung der Warnungen mit fester Breite in meiner eigenen App durch Ändern der Breite der Objektabstände von fester Breite in größer oder gleich oder weniger als oder gleich.
Dazu können Sie das Objekt im Interface Builder auswählen, zum Größeninspektor wechseln und dort ändern:
Oder wählen Sie die Einschränkung aus der Dokumentgliederung aus, wechseln Sie zum Größeninspektor und ändern Sie ihn dort:
Soweit die Warnung oben auf Ihrem Screenshot:
Behobene vordere und nachfolgende Abhängigkeiten mit einer mittleren Einschränkung können Zu Clipping führen
Hier ist ein Screenshot von meiner eigenen App, in dem ich genau dieselbe Warnung erhalten habe:
Ich hatte das Label mit dem @ -Zeichen auf die Schaltflächen als Vorlauf und Nachlauf gesetzt, aber auch, um die Mitte auf das Bewertungsetikett auszurichten. Sobald ich entfernte die Beschränkung für die zentrierte Ausrichtung, verschwand die Warnung, aber ich hatte einen nicht ordnungsgemäß ausgelegten Satz von Objekten.
Dann habe ich mich mit umarmen der Stack-Ansicht abgefunden. So ärgerlich es auch ist, wenn Sie alle Einschränkungen und Einstellungen richtig vorgenommen haben, wird es schön und ohne Warnungen angezeigt.
Bearbeiten
Wenn Repose in die Kommentare schreibt, ist es manchmal das, was Sie brauchen, um einfach> = 0 hinzuzufügen, da Sie sicherstellen, dass sich zwei Elemente nicht überlappen.
Sie können versuchen, "Respect Language Direction" für jede Einschränkung zu deaktivieren, um die Warnung auszuschalten und zu sehen, ob sie hilft. Wählen Sie Ihre Einschränkung aus und öffnen Sie den Inspektor Attribute/Größe. Bitte sehen Sie das Bild im Anhang.
p.s. Diese Lösung funktioniert für iOS. Für macOS versuchen Sie, die Warnung durch Drücken von> = oder <= zu unterdrücken.
Für lokalisierte Beschriftungen und Schaltflächen ist diese Warnung sinnvoll, und Sie sollten die erforderlichen Einschränkungen angeben, damit sich Ihre Beschriftungen nicht überlappen. Wenn sie sich jetzt nicht überlappen, könnten sie in der Zukunft liegen, so dass es nicht schaden wird, die Einschränkungen bereitzustellen.
Mit Xcode können Sie diese Einschränkungen automatisch hinzufügen:
Klicken Sie in der Dokumentenkontur Ihres Storyboards auf den gelben Pfeil und wählen Sie entweder "Feste Führung" oder "Feste Nachführung", je nachdem, wo sich der Text auf Ihrem Bildschirm befindet (links oder rechts). Dies wird es für die meisten Probleme beheben.
Wenn Sie dieses Problem mit einem Button ohne Text (nur Bild) haben, versuchen Sie, den "Standardtitel" zu entfernen, der möglicherweise noch für den Button festgelegt ist:
Zu diesem Problem denke ich, dass Ihr Objekt nicht weiß, was die richtige Mittelposition im Kontext von Superview ist, und dass Entfernen, größer als oder andere führende/trealing-Einstellungen verwendet werden nicht richtig arbeiten Zuerst müssen Sie die korrekten Bedingungen Ihres Superview überprüfen.
Wenn Ihre Überblicke richtig eingestellt sind, können Sie versuchen, Ihrem Objekt die richtige Position in der Ansicht "zu erklären", indem Sie die Einschränkung "horizontal in Container" setzen:
Ich weiß, dass diese Frage bereits beantwortet wurde. Was ich in diesem Fall jedoch getan habe, um diesen Fehler zu beheben, bestand darin, die Eigenschaft "Seitenverhältnis" hinzuzufügen und dann die Breiten- oder Höhenbeschränkung zu beseitigen. Dies funktionierte ziemlich gut und war weniger Aufwand die gleiche Ausgabe und passen meine Ansicht für die verschiedenen Geräte an.
Ich hatte das gleiche Problem, als ich zu Xcode 9 wechselte, und fand einen Ansatz, der für bestimmte Layouts hilfreich ist. In meinem Fall wollte ich einen Tabellenkopf, in dem zwei Spalten (UILabels) eine feste Breite und eine andere eine variable Breite hatten. Unabhängig davon, wie ich Spaltenbreiten angegeben habe (einschließlich der Verwendung von Bedingungen, die größer oder gleich sind, anstelle von "gleich" usw.), wurde mir immer die Warnung vor möglichen Beschneidungen angezeigt. In meinem Fall wollte ich, dass die Spalte mit der variablen Breite (UILabel) bei Bedarf zugeschnitten wird. Ich hätte die Warnung einfach ignorieren können, aber das mag ich nicht.
Der Ansatz, der hier arbeitete, bestand darin, eine UIView mit entsprechenden Größenbeschränkungen zu erstellen und das UILabel als Unteransicht in die UIView einzubetten. Dann erfolgt ggf. eine Kürzung und ich bekomme keine Warnung. Dies funktioniert unabhängig davon, ob sich das UIView/embedded UILabel in einer StackView befindet oder nicht.
Dies ist im Wesentlichen der gleiche Ansatz wie der von Haroldo Gondim, aber hier kann man sehen, dass er auch mit oder ohne StackView funktioniert.
Das folgende Bild zeigt die Vorgehensweise mit und ohne StackView. "SpacerName" ist eine UIView mit variabler Breite, die ein Label enthält, und "SpacerPD" hat eine feste Breite von 80. [Farben sind nicht signifikant; nur dort, um zu zeigen, wo die Ansichten sind.]
Ich hatte das gleiche Problem, aber wenn ich zu >=
wechsle, wird die Konstante automatisch auf 0
gesetzt. Wenn ich beispielsweise 60
wähle, erscheint die Warnung erneut. Also war ich in einer Schleife mit dem Problem.
Ich könnte das Einbetten meiner Label
in eine View
korrigieren.
Editor > Embed In > View
In Label
setze ich Top
, Bottom
, Leading
und Trailing
mit constant = 0
In View
habe ich die constraints
eingestellt, die ich vorher erwartet hatte.
So beheben Sie den Fehler: Feste Breitenbeschränkungen können Clipping verursachen “und andere Lokalisierung. __ Sie müssen die Ansicht/das Objekt auswählen, im" Informationen anzeigen "-Infektor nach der Breitenbeschränkung suchen und die Konstante auf" Größer "setzen oder gleich:
Zum Beheben des Fehlers: Es fehlt eine führende/nacheilende Einschränkung, die zu einer Überlappung mit anderen Ansichten führen kann
Dies bedeutet, dass der View/Object-Xcode sich beschwert, dass eine führende oder nachstehende Einschränkung für eine benachbarte Ansicht fehlt.
Ziehen Sie bei gedrückter Maustaste auf eine nahe Ansicht/ein Objekt
Wie Sie im Bild unten sehen können, hatte ich den Fehler "Feste Breitenbeschränkungen können zu Beschneidungen führen", da ich zwar mein Textfeld vertikal zentriert eingestellt hatte und mein Label eine linke Randbeschränkung hatte, aber ich t definierte eine Einschränkung für das Textfeld in Bezug auf das Label, sodass XCode mich darauf aufmerksam machte, dass das Textfeld das Label abschneiden könnte (darüber gerendert werden könnte).
Nachdem Sie die linke Einschränkung in das Textfeld eingefügt haben, um immer etwas Abstand von der Beschriftung zu halten, wurde der Fehler als von XCode gelöst betrachtet und es störte mich nicht mehr mit der Einschränkungswarnung.
Wenn Sie eine feste Breitenbeschränkung für die Schaltfläche benötigen, setzen Sie die Breitenbeschränkungspriorität auf 700
.