Ich habe den neuen Xcode heruntergeladen und im Interface Builder habe ich eine Menge Probleme mit Warnungen, die Dinge sagen wie:
Feste Breitenbeschränkungen können zu Übersteuerungen führen
Es sieht aus wie das:
Ich habe eine Lokalisierung für mehrere Sprachen und verstehe die Warnung, dass sich in einer anderen Sprache die Größe eines Etiketts ändern kann, aber meine App hat dieses Problem nicht. Ich habe es gestern in Xcode 8 ausgeführt und getestet, es war in Ordnung. Ich möchte nicht stundenlang sinnlose neue Einschränkungen hinzufügen.
Irgendwelche Lösungsvorschläge?
Antworten:
Ich bekam die gleichen Warnungen auch ohne mehrere Sprachen in meiner App , was mich dazu brachte herauszufinden, was wirklich los war. . .
Hier gibt es ein paar verschiedene Dinge. Ich konnte die Warnungen mit fester Breite in meiner eigenen App stummschalten, indem ich die Breite der Objektabstände von fester Breite auf größer oder gleich oder kleiner als oder gleich änderte .
Dies kann erreicht werden, indem Sie das Objekt im Interface Builder auswählen, zum Größeninspektor gehen und es dort ändern:
Oder wählen Sie die Einschränkung aus der Dokumentskizze aus, gehen Sie zum Größeninspektor und ändern Sie sie dort:
Soweit die Warnung oben in Ihrem Screenshot:
Hier ist ein Screenshot von meiner eigenen App, in dem ich genau die gleiche Warnung erhielt:
Ich hatte das Etikett mit dem @ -Zeichen so eingestellt, dass es zu den Schaltflächen führt und folgt, aber auch, um die Mitte mit dem Bewertungsetikett auszurichten . Nachdem ich die Mittelausrichtungsbeschränkung entfernt hatte , verschwand die Warnung, aber ich hatte einen falsch angelegten Satz von Objekten.
In diesem Moment habe ich mich damit abgefunden, die Stapelansicht anzunehmen . So ärgerlich es auch ist, wenn Sie alle Einschränkungen und Einstellungen richtig eingestellt haben, ist es wunderschön und ohne Warnungen dargestellt.
Bearbeiten
Wie Repose in den Kommentaren schreibt, ist es manchmal erforderlich, einfach> = 0 hinzuzufügen, da Sie sicherstellen, dass sich zwei Elemente nicht überlappen.
quelle
Sie können versuchen, "Sprachrichtung respektieren" pro Einschränkung zu deaktivieren, um die Warnung auszuschalten und festzustellen, ob sie hilfreich ist. Wählen Sie Ihre Einschränkung aus und öffnen Sie den Attribut- / Größeninspektor. Bitte siehe Bild im Anhang.
Wenn Sie nicht vorhaben, Ihre App in anderen Sprachen zu lokalisieren, sollte diese Lösung keine Fallbacks aufweisen. Bei lokalisierten Apps müssen Sie sich Ihrer Beschriftung und Schriftgröße bewusster sein.
ps Diese Lösung funktioniert für iOS. Versuchen Sie unter macOS> = oder <=, um die Warnung auszuschalten.
pps Beschriftungen in der Abbildung unten lassen sich mit AutoLayout und der AttributString-Eigenschaft für ein einzelnes UILabel oder UITextView mit NSMutableAttributedString viel einfacher erstellen. Das Bild dient nur zu Demonstrationszwecken.
quelle
Für lokalisierte Beschriftungen und Schaltflächen ist diese Warnung sinnvoll, und Sie sollten die erforderlichen Einschränkungen angeben, damit sich Ihre Beschriftungen nicht überschneiden. Wenn sie sich jetzt nicht überschneiden, können sie dies in Zukunft tun, sodass es nicht schadet, die Einschränkungen bereitzustellen.
Mit Xcode können Sie diese Einschränkungen automatisch hinzufügen:
Klicken Sie im Dokumentumriss Ihres Storyboards auf den gelben Pfeil und wählen Sie entweder "fester Vorsprung" oder "fester nachlaufender", 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 einer Schaltfläche ohne Text (nur Bild) haben, versuchen Sie, den "Standardtitel" zu entfernen, der möglicherweise noch für die Schaltfläche festgelegt ist:
quelle
UIButton
zuStoryboard
derdefault button
Titel lautetbutton
.Mit
Labels
können Sie einstellen ,Lines
ist0
undAutoshrink
Eigenschaften istMinimum Font Size
zu entfernen ,Fixed Width Constraints May Cause Clipping
Warnungen, wie folgt aus :quelle
Eine weitere schnelle Lösung!
Für einen UIButton durch Ändern des Titels von einfach zu Attributiertem Text wurde auch mein Problem behoben: -
quelle
Ich weiß, dass diese Frage bereits beantwortet wurde, aber was ich getan habe, um diesen Fehler in meinem Fall zu beheben, war, die Eigenschaft "Seitenverhältnis" hinzuzufügen und dann die Breiten- oder Höhenbeschränkung zu beseitigen. Dies funktionierte ziemlich gut und war weniger aufwendig, und ich konnte es behalten die gleiche Ausgabe und passen Sie meine Ansicht für die verschiedenen Geräte an.
quelle
Swift 4, Xcode 9.1:
In Bezug auf dieses Problem denke ich, dass Ihr Objekt im Kontext seiner Übersicht nicht weiß, wie die richtige Mittelposition ist , und die Verwendung von Einstellungen zum Entfernen, größer als oder andere führende / trealing-Einstellungen funktioniert meistens nicht richtig. Zunächst müssen Sie die korrekten Einschränkungen Ihrer Übersicht überprüfen.
Wenn Ihre Übersicht (en) richtig eingestellt sind, können Sie versuchen, Ihrem Objekt die richtige Position in der Ansicht zu "erklären", indem Sie die Einschränkung "horizontal im Container" festlegen:
quelle
Wenn Sie eine feste Breitenbeschränkung für die Schaltfläche benötigen, setzen Sie einfach die Priorität der Breitenbeschränkung auf
700
.quelle
Ich hatte das gleiche Problem, aber wenn ich darauf umsteige,
>=
setze ich die Konstante automatisch auf0
, wenn ich60
zum Beispiel wähle , erscheint die Warnung erneut. Also war ich mit dem Problem in einer Schleife.Ich konnte das Einbetten meiner
Label
in a behebenView
In
Label
I SatzTop
,Bottom
,Leading
undTrailing
mitconstant = 0
In habe
View
ich das eingestelltconstraints
, was ich vorher erwartet hatte.quelle
Ich hatte das gleiche Problem beim Wechsel zu Xcode 9 und fand einen Ansatz, der für bestimmte Arten von Layouts nützlich 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 Einschränkungen größer oder gleich anstelle von gleich usw.), wurde immer wieder vor möglichen Übersteuerungen gewarnt. In meinem Fall wollte ich, dass die Spalte mit variabler Breite (UILabel) bei Bedarf abgeschnitten wird. Ich hätte die Warnung einfach ignorieren können, aber das mag ich nicht.
Der hier funktionierende Ansatz bestand darin, eine UIView mit entsprechenden Größenbeschränkungen zu erstellen und das UILabel als Unteransicht in die UIView einzubetten. Dann erfolgt bei Bedarf eine Kürzung, und ich erhalte 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 bei Haroldo Gondim, aber hier können Sie sehen, dass er auch mit oder ohne StackView funktioniert.
Das folgende Bild zeigt den Ansatz mit und ohne StackView. "SpacerName" ist eine UIView mit variabler Breite, die eine Beschriftung enthält, und "SpacerPD" ist eine UIView mit einer festen Breite von 80. [Farben sind nicht signifikant; nur um zu zeigen, wo die Ansichten sind.]
quelle
Wie Sie in der Abbildung unten sehen können, hatte ich den Fehler "Feste Breitenbeschränkungen können zu Übersteuerungen führen", da ich, obwohl ich mein Textfeld vertikal zentriert und meine Beschriftung auf eine Einschränkung für den linken Rand eingestellt hatte, keine Einschränkung definiert hatte Für das Textfeld in Bezug auf das Etikett warnte mich XCode, dass das Textfeld das Etikett ausschneiden (oben gerendert) werden könnte.
Nachdem ich die linke Einschränkung zum Textfeld hinzugefügt hatte, um immer einen gewissen Abstand zum Etikett zu haben, wurde der Fehler von XCode als behoben betrachtet und störte mich nicht mehr mit der Einschränkungswarnung.
quelle
Ich hatte ein ähnliches Problem, als ich versuchte, die Schaltfläche mit den gleichen Auffüllungen an den Rändern der Superansicht zu haben.
Am Ende habe ich
horizontal center
Einschränkungen undequal widths
Einschränkungen für diesuper view
.quelle
So beheben Sie den Fehler : Feste Breitenbeschränkungen können zu Übersteuerungen führen “und andere Lokalisierung Sie müssen die Ansicht / das Objekt auswählen, zum" Größeninspektor anzeigen "gehen, die Breitenbeschränkung suchen und die Konstante auf" Größer "oder" Gleich "setzen.
So beheben Sie den Fehler : Die Einschränkung "Führen" / "Nachlauf" fehlt, was zu Überlappungen mit anderen Ansichten führen kann
Dies bedeutet, dass die Ansicht / das Objekt, über die sich Xcode beschwert, eine führende oder nachfolgende Einschränkung zu einer benachbarten Ansicht fehlt.
Ziehen Sie bei gedrückter Steuerung zu einer Ansicht / einem Objekt in der Nähe
Fügen Sie eine führende oder nachfolgende Einschränkung hinzu
quelle