webentwicklung-frage-antwort-db.com.de

UILabel falscher Zeilenumbruch in iOS 11

Ich habe Probleme mit der Verwendung von XIBs ohne Autolayout. Ich weiß nicht, ob dies eine wichtige Information ist.

Ich habe UILabel mit 2 Zeilen mit Word Wrap. In iOS 10 funktionierte der Zeilenumbruch ordnungsgemäß und die erste Zeile enthielt ein Wort + Sonderzeichen, z. B. kaufmännisches Und. Beispiel:

UiLabel on ios 10

Unter iOS 11 funktioniert der Zeilenumbruch dann irgendwie falsch und setzt ampresand in die zweite Zeile:

UiLabel on ios 11

Dies ist problematisch, da längere Wörter, die normalerweise in die zweite Zeile eingefügt werden, nicht korrekt angezeigt werden. Irgendeine Idee, was sich geändert hat? Ich kenne safeArea, aber es sieht nicht nach Vernunft aus. Irgendwelche Ideen, wie man dieses kaufmännische Und an die Spitze bringt, wo genug Platz dafür ist?

Rest der Einstellungen: size inspector

36
studentbi

Dies könnte sehr wahrscheinlich eine absichtliche Änderung durch Apple) sein, um verwitwete Linien zu verhindern. Aus gestalterischer Sicht wird es bevorzugt, kein einziges Wort in einer Textzeile zu haben Bricht die Zeile so um, dass in der zweiten Textzeile immer mindestens 2 Wörter stehen.

Es ist jedoch überraschend, dass es keine Dokumentation oder Möglichkeit gibt, dieses Verhalten zu deaktivieren.

enter image description here

Auch hier ist ein guter Artikel über "verwitweten" und "verwaisten" Text.

48
brynbodayle

App mit den Argumenten starten -NSAllowsDefaultLineBreakStrategy NO (eine undokumentierte Standardeinstellung) scheint das alte Verhalten wiederherzustellen. Alternativ können Sie NSAllowsDefaultLineBreakStrategy beim Start auf NO in NSUserDefaults setzen (Apple registriert einen Standardwert von YES für diesen Wert, wenn UILabel oder Der Zeichenketten-Zeichnungscode wird initialisiert, so dass Sie danach einen überschreibenden Wert registrieren oder in NSArgumentDomain einfügen müssen oder einfach die Standardeinstellung dauerhaft festlegen müssen.

Apple kann diese private API in Betracht ziehen und Apps ablehnen, die sie verwenden. Ich bin mir nicht sicher. Ich habe dies in einer Versand-App nicht ausprobiert. Es funktioniert jedoch beim schnellen Testen - hat die Einstellung in NSUserDefaults gesehen und festgestellt, dass eine Änderung das Verhalten geändert hat.

18
Carl Lindberg

Dies ist nicht wirklich eine Antwort, aber ich möchte eine Illustration hinzufügen, wie es ein allgemeines Problem ist, das überhaupt nicht mit kaufmännischem Und zusammenhängt.

two UILabels

Beide UILabels haben identische Breitenbeschränkungen und der Text ist fast identisch. Aber der zweite hat den Zeilenumbruch, den ich erwarten würde. Das erste ist falsch, das "Über" kann eindeutig in der ersten Zeile bleiben.

10
David Dunham

Eine Option könnte sein, stattdessen ein UITextView zu verwenden - das scheint dieses Verhalten nicht zu haben. Wenn Sie NSTextContainer.lineFragmentPadding auf 0 setzen, textContainerInset auf UIEdgeInsetsZero und alle Bildlaufoptionen (scrollEnabled, Bounces, Bildlaufindikatoren usw.) deaktivieren, wird dies ähnlich wie bei einem UILabel angezeigt, allerdings mit nicht so großer Einschränkungsflexibilität. Es ist kein Ersatz, aber in manchen Situationen ist es akzeptabel.

1
Carl Lindberg

Es scheint, dass das Ersetzen des Leerzeichens vor dem kaufmännischen Und durch ein nicht unterbrechendes Leerzeichen (U + 00A0) das kaufmännische Und in derselben Zeile hält. Abhängig davon, wie Sie den Text für das Etikett generieren, ist dies möglicherweise nicht einfach zu automatisieren (in einigen Fällen muss das kaufmännische Und in der zweiten Zeile wirklich vorhanden sein).

1
Geoff Hackworth