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:
Unter iOS 11 funktioniert der Zeilenumbruch dann irgendwie falsch und setzt ampresand in die zweite Zeile:
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?
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.
Auch hier ist ein guter Artikel über "verwitweten" und "verwaisten" Text.
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.
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.
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.
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.
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).