Was ist setTranslatesAutoresizingMaskIntoConstraints: NEIN für?

9

In einem Projekt, das ich zu verstehen versuche, gibt es einen Code:

%Vor%

Für jede Ansicht ist eine Eigenschaft setTranslatesAutoresizingMaskIntoConstraints auf NO gesetzt, zum Beispiel:

%Vor%

Dann fügt es diesen Ansichten einige Einschränkungen hinzu:

%Vor%

Die Fragen lauten:

  • Wofür ist setTranslatesAutoresizingMaskIntoConstraints:NO ? Warum, wenn ich eine Zeile mit dieser Methode entferne, ist alles kaputt?
  • Was macht diese Linie?

    %Vor%
Bartłomiej Semańczyk 04.03.2015, 22:34
quelle

2 Antworten

17

Auto-Layout ist eine relativ neue Funktion. Das bedeutet, dass es drei Arten von Code gibt:

  • Code, der das automatische Layout nicht kennt. Es verwendet den Springs-and-Struts-Ansatz, weil es nichts anderes weiß.
  • Code, der sich des automatischen Layouts bewusst ist, aber in einigen Fällen Spring-and-Struts verwendet.
  • Code, der das automatische Layout verwendet.

Dies gilt für Ihren Code, den Code der Frameworks (UIKit) und den Code der Bibliotheken von Drittanbietern.

Aufgrund der Existenz des ersten Codetyps müssen alle Ansichten standardmäßig das alte Springs-and-Struts-Verhalten aufweisen. Code, der sich des automatischen Layouts bewusst ist, kann dies ausschalten, wenn er möchte, aber Code, der nicht bewusst ist, konnte ihn offensichtlich nicht einschalten, weil er nicht weiß, ob er es tun muss oder welche Eigenschaft er einstellen soll.

Da das alte Springs-and-Struts-Verhalten den meisten Möglichkeiten des automatischen Layouts widerspricht, muss Code, der das automatische Layout verwendet, normalerweise deaktiviert werden. Dies geschieht, indem Sie die Eigenschaft translatesAutoresizingMaskIntoConstraints auf NO setzen.

Diese Entscheidung muss dem Controller-Code überlassen werden, der die fragliche Ansicht in die Ansichtshierarchie stellt, weil nur dieser Code weiß, wie er die Ansicht im Layout (oder, im Falle des ersten Typs von Code, nicht "weiß" aber verwendet Federn und Struts aus Unwissenheit.

Wenn Sie translatesAutoresizingMaskIntoConstraints in Ihrem Controllercode, der das automatische Layout verwendet, nicht löschen können, erhalten Sie normalerweise Ausnahmen aufgrund nicht erfüllbarer Einschränkungen. Die Ausnahmen werden abgefangen und größtenteils ignoriert, aber das automatische Layoutsystem muss einige Ihrer Einschränkungen ignorieren, um das Layout zu vervollständigen. Als Konsequenz können Ihre Ansichten falsch dargestellt werden.

Diese Zeile:

%Vor%

fügt Constraints hinzu, die den foregroundContentScrollView horizontal in den Superview einbeziehen. Die Vorderkante dieser Ansicht wird so eingestellt, dass sie der Vorderkante der Superview entspricht, und die Hinterkante wird so eingestellt, dass sie der Hinterkante der Superview entspricht.

    
Ken Thomases 04.03.2015, 23:56
quelle
0

Dies ist eine Möglichkeit für Ansichten, die das automatische Layout verwenden, um das Layout der alten Federn und Streben zu ignorieren. Siehe

Ссылка

diesen Link für eine großartige Erklärung. Wenn Sie das automatische Layout wie Sie verwenden möchten, sollten Sie das automatische Layout und nicht die Federn und Verstrebungen anhören. Deshalb ist es auf NEIN eingestellt.

    
Douglas 04.03.2015 22:51
quelle

Tags und Links