2016-07-20 20 views
6

Warum genau wird preferredMaxLayoutWidth benötigt?Warum genau wird preferredMaxLayoutWidth benötigt?

UIKit reference sagt

preferredMaxLayoutWidth

die bevorzugte maximale Breite (in Punkten) für ein mehrzeiliges Etikett.

Diese Eigenschaft wirkt sich auf die Größe des Etiketts aus, wenn Layouteinschränkungen darauf angewendet werden. Wenn der Text während des Layouts über die in dieser Eigenschaft angegebene Breite hinausgeht, wird der zusätzliche Text in eine oder mehrere neue Zeilen geflossen, wodurch die Höhe der Beschriftung erhöht wird.

Hinweis dies:

, wenn der Text über die Breite von dieser Eigenschaft angegebenen erstreckt, wird der zusätzliche Text fließt an eine oder mehreren neuen Linien

Also, auf einem mehrzeiligen Etikett , wenn die preferredMaxLayoutWidth Eigenschaft nicht festgelegt wurde, würde der Text gerade über die bounds der UILabel weitergehen? Warum sollten wir jemals wollen, dass dies auf einem Label passiert, das wir explizit als Multiline definieren?

Was ist der Grund, warum diese Eigenschaft existiert? Ist es etwas mit Auto Layout? Bitte erklären, ich möchte das wirklich verstehen.

Antwort

13

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!

+0

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? –

+0

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? –

+0

Was ist die erste Breite des Runtime-Layouts? –