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:
Dann fügt es diesen Ansichten einige Einschränkungen hinzu:
%Vor%Die Fragen lauten:
setTranslatesAutoresizingMaskIntoConstraints:NO
? Warum, wenn ich eine Zeile mit dieser Methode entferne, ist alles kaputt? Was macht diese Linie?
%Vor%Auto-Layout ist eine relativ neue Funktion. Das bedeutet, dass es drei Arten von Code gibt:
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.
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.
Tags und Links objective-c ios