Ihre Vermutung ist richtig - es hat mit Auto-Layout zu tun. Wenn das System ein mehrzeiliges Etikett erstellen muss, muss es zwei Dimensionen kennen: die Breite und die Höhe des Etiketts.
Manchmal beschränken Sie eine oder beide explizit: Sie können sagen: "Ich möchte, dass mein Label 300 Punkte breit ist" oder "Ich möchte mein Label genau eine Zeile hoch". Das System kann dann basierend auf Ihrer Einschränkung und dem Text im Etikett die andere Dimension ermitteln.
Andere Zeiten, jedoch, Sie nicht beschränken - entweder möchten Sie die Beschriftung in verfügbaren Speicherplatz umbrechen, aber horizontal schrumpfen, wenn es nicht viel Text enthält, so dass Sie nicht beschränken die Breite oder die Höhe genau. In diesem Fall kann Auto Layout verwechselt werden, da Text nicht wirklich eine "innere Größe" hat, wie es bei vielen anderen Inhalten der Fall ist. Zum Beispiel:
A sentence can be quite long horizontally,
or
it
might
be
skinny
but
tall
Diese beiden Layouts - und viele dazwischen - wären in Auto Layouts Augen gleichermaßen gültig. Um dies zu verdeutlichen, führte Apple die Eigenschaft preferredMaxLayoutWidth
zum Umhüllen von Etiketten ein. Wenn Ihr Etikett nicht explizit eine genaue Breite oder Höhe festlegt, beginnt UIKit mit dem Auslegen von Text in der ersten Zeile, bis Sie die bevorzugte maximale Breite für das Layout erreicht haben. Anschließend wickeln Sie den Prozess in jeder nachfolgenden Zeile ab und setzen ihn fort.
Wenn preferredMaxLayoutWidth
nicht eingestellt ist, wird der Text nicht über die bounds
des Etiketts hinausgehen.Stattdessen würde ein von zwei Dingen passieren:
- Das Label würde breite und breiter erhalten, erweitert seinen
frame.size.width
den Text auf einer Zeile passen, bis er alles gemacht wurde, oder
- Das Label würde seinen Text gestutzt
effektiv macht dies die preferredMaxLayoutWidth
Eigenschaft einen Mechanismus zum Führungsverhalten Auto-Layouts der beim Textumbruch ohne benötigen Sie eine Reihe von dynamischen Einschränkungen Code zu schreiben, um den gleichen Effekt zu erzielen. Es ist eine recht praktische Abkürzung, besonders wenn es mit einigen der Interface Builder Optionen kombiniert wird, um die maximale Layoutbreite auf z. die Breite der ersten Runtime-Layouts.
Hoffe, dass hilft, Dinge zu klären!
Vielen Dank für diese Antwort. Ich habe mit dem Verständnis von Auto-Layout und den damit verbundenen Dingen zu kämpfen, und Ihre Erklärung ist sehr klar und angenehm zu lesen. Ich wünschte, alle Apple-Dokumentation wäre so. Ich habe Ihre Antwort aufgefrischt und ich möchte nur, dass Sie eine Sache kommentieren, bevor ich Sie akzeptiere. Führt preferredMaxLayoutWidth mehr, weniger oder anders als nur eine einfache Breiteneinschränkung? Ist das ganz und gar das, was es ist, eine Abkürzung, um eine Breitenbeschränkung zu erzeugen? –
Oh! Vielleicht ist es das: bevor Constraints in Interface Builder hinzugefügt wurden, preferredMaxLayoutWidth wurde benötigt, um die Breite eines mehrzeiligen Labels anzugeben (da das Akzeptieren der Grenzen nicht als ausreichend angesehen wurde? Warten ...) edit: nein das kann es nicht sein, weil dies ding existierte nicht vor den Einschränkungen, UIKit reference states preferredMaxLayoutWidth wurde in iOS 6.0 hinzugefügt. Hmm ... Nun, vielleicht ist es nur eine Abkürzung für die Erstellung einer Breitenbeschränkung? –
Was ist die erste Breite des Runtime-Layouts? –