Xcode 9 - „Feste Breitenbeschränkungen können zu Übersteuerungen führen“ und andere Lokalisierungswarnungen


147

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:

Geben Sie hier die Bildbeschreibung ein

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?


Ich schlage vor, dass Sie sich die automatische Größenänderung ansehen
Dark Innocence

3
Hier gilt das gleiche. Es gibt Schaltflächen, deren Breite in allen Sprachen garantiert 50pt beträgt. Warum mein sonst sauberes Autolayout-Zeugnis damit beschmutzen?
John Scalo

9
Dies ist definitiv ein großes Problem, und es ist überraschend, dass nicht mehr darüber gesprochen wird: O
Fattie

2
Ich bekomme diesen Fehler sogar mit nur englischer Lokalisierung.
Schatten

6
Für andere, wenn Sie KEINE Lokalisierungen haben und einfach möchten, dass diese Warnungen verschwinden, verschieben Sie Ihr Storyboard wie hier angegeben aus dem Ordner Base.iproj
William T.

Antworten:


179

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:

Geben Sie hier die Bildbeschreibung ein


Oder wählen Sie die Einschränkung aus der Dokumentskizze aus, gehen Sie zum Größeninspektor und ändern Sie sie dort:

Geben Sie hier die Bildbeschreibung ein



Soweit die Warnung oben in Ihrem Screenshot:

Behobene führende und nachfolgende Einschränkungen mit einer mittleren Einschränkung können zu Übersteuerungen führen

Hier ist ein Screenshot von meiner eigenen App, in dem ich genau die gleiche Warnung erhielt:

Geben Sie hier die Bildbeschreibung ein

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.


2
> = 0 verhindert überlappende und behobene Überlappungsprobleme, die ich zuvor hatte. Durch Konvertieren von Leading / Trailing nach Right / Left wurde der Clipping-Fehler für mich behoben. Ergebnisse können variieren. Bitte konsultieren Sie Ihren Arzt, bevor Sie mit der Softwareentwicklung beginnen.
Ruhe

@Repose genau. Überlegen Sie, was möglicherweise schief geht, und fügen Sie eine Einschränkung hinzu, um sicherzustellen, dass dies nicht der Fall ist.
Shades

Zurückgetreten, um Stack View in iOS zu verwenden, ist vielleicht in Ordnung, aber für OS X (sorry MacOS) ist es nicht immer eine gute Wahl. Apple sollte es wissen. Das Konzept von UI und UX hat oft unterschiedliche Annahmen.
Joannes

2
Ich bin damit einverstanden, die UIStackView zu akzeptieren. Es war definitiv ein Schmerz und ich habe versucht, es mit ein paar Einschränkungen zu tun. Ich habe ein weiteres UIStackView hinzugefügt und es war perfekt angelegt.
Templeman15

1
Gibt es eine andere Option - Was ist, wenn ich mein Steuerelement als feste Breite haben möchte?
Kampai

60

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.

Missachtung der Sprachrichtung


1
Das Problem "Behobene führende und nachfolgende Einschränkungen mit einer mittleren Einschränkung können zu Übersteuerungen führen" wurde für mich behoben. Vielen Dank!
Toddg

4
Wenn Sie dies versucht haben und es keine Auswirkungen zu haben schien, beenden Sie Xcode und starten Sie es neu. Dieser Trick hat bei mir funktioniert.
T'Pol

2
Ich werde das nicht abwählen.
Roller

1
Perfekt! Das hat bei mir funktioniert und ich muss meine Einschränkungen nicht ändern, danke!
Rgkobashi

1
> = Einschränkungen hatten aufgrund verschiedener komplexer Prioritätsschemata negative Auswirkungen auf mich. Ich war bereit, mein Etikett in eine Ansicht einzufügen, fand dann aber Ihre Lösung, die den Trick machte! Danke :)
KerCodex

33

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.

Xcode Screenshot

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:

Xcode Screenshot


4
In meinem Fall wurde durch Entfernen des Standardtitels die Warnung entfernt. Vielen Dank!
Reinhard Männer

Beachten Sie, dass beim Hinzufügen eines UIButtonzu Storyboardder default buttonTitel lautet button.
Miguel Tepale

29

Mit Labelskönnen Sie einstellen , Linesist 0und AutoshrinkEigenschaften ist Minimum Font Sizezu entfernen , Fixed Width Constraints May Cause ClippingWarnungen, wie folgt aus :

Geben Sie hier die Bildbeschreibung ein


3
Ja, Sie müssen nur die Zeilen auf 0 setzen.
Reefwing

2
Wenn Sie Zeilen auf 0 setzen, wird die Beschriftung auf so viele Zeilen wie erforderlich erweitert, was möglicherweise nicht Ihren Wünschen entspricht.
Nickdnk

@nickdnk: Ich weiß, dass wenn Sie die Höhenbeschränkung für das Etikett festgelegt haben, es nicht erweitert wird.
Lionking

20

Eine weitere schnelle Lösung!

Für einen UIButton durch Ändern des Titels von einfach zu Attributiertem Text wurde auch mein Problem behoben: -

Geben Sie hier die Bildbeschreibung ein


Lief wie am Schnürchen!
Handwerk

7

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.


4

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:

Geben Sie hier die Bildbeschreibung ein


2

Wenn Sie eine feste Breitenbeschränkung für die Schaltfläche benötigen, setzen Sie einfach die Priorität der Breitenbeschränkung auf 700.


1

Ich hatte das gleiche Problem, aber wenn ich darauf umsteige, >=setze ich die Konstante automatisch auf 0, wenn ich 60zum Beispiel wähle , erscheint die Warnung erneut. Also war ich mit dem Problem in einer Schleife.

Ich konnte das Einbetten meiner Labelin a behebenView

Editor > Embed In > View

In LabelI Satz Top, Bottom, Leadingund Trailingmitconstant = 0

Einschränkungen

In habe Viewich das eingestellt constraints, was ich vorher erwartet hatte.


1

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.]

Geben Sie hier die Bildbeschreibung ein


0

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.

Geben Sie hier die Bildbeschreibung ein

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.


0

Ich hatte ein ähnliches Problem, als ich versuchte, die Schaltfläche mit den gleichen Auffüllungen an den Rändern der Superansicht zu haben.

Fehlerfall

Am Ende habe ich horizontal centerEinschränkungen und equal widthsEinschränkungen für die super view.

Meine Lösung


-1

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.

Größeninspektor

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

Contrl + PressClick

Fügen Sie eine führende oder nachfolgende Einschränkung hinzu

Führende / nachfolgende Einschränkung


Wenn Sie auf das Warndreieck klicken, erstellt Xcode diese automatisch mit einem Klick für Sie.
Lensovet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.