UIView: layoutSubviews und initWithFrame

7

Wenn ich UIView unterklassiere, lege ich normalerweise meinen gesamten Initialisierungs- und Layout-Code in die init -Methode. Aber mir wurde gesagt, dass der Layout-Code durch Überschreiben von layoutSuviews erfolgen sollte. Es gibt einen Beitrag zu SO, der erklärt, wenn jede Methode aufgerufen wird. aber ich würde gerne wissen, wie man sie in der Praxis benutzt.

Ich setze derzeit meinen gesamten Code in die init -Methode, wie folgt:

MyLongView.m

%Vor%

Es ist die übliche Aufgabe: den Rahmen der Ansicht zu erstellen, einen iVar zu initialisieren, einen scrollview zu erstellen, UIImagages zu initialisieren, sie in UIImageViews zu platzieren und auszulegen.

Meine Frage ist: Welche davon sollte in init gemacht werden, und welche davon sollte in layoutSubviews gemacht werden?

    
Eric 01.11.2012, 12:38
quelle

2 Antworten

15

Ihre init sollte alle Objekte mit den erforderlichen Daten erstellen. Jeder Rahmen, den Sie in init an sie übergeben, sollte idealerweise ihre Startposition sein.

Dann ändern Sie innerhalb von layoutSubviews: die Rahmen aller Ihrer Elemente, um sie dort zu platzieren, wo sie hingehören. In layoutSubviews sollte keine Zuweisung oder Initialisierung erfolgen, nur die Änderung ihrer Positionen, Größen usw. ...

    
WDUK 01.11.2012, 12:49
quelle
4

Falls die Autoresierung nur mit autoresizingFlags oder automatischem Layout funktioniert, können Sie einfach init verwenden, um die gesamte Ansicht zu erstellen.

Aber im Allgemeinen sollten Layouts in layoutSubviews erstellt werden, da dies bei jeder Änderung des Views-Rahmens und in anderen Situationen, wo das Layout wieder benötigt wird, aufgerufen wird. Manchmal wissen Sie nur nicht den letzten Frame einer Ansicht innerhalb von init, also müssen Sie wie erwähnt flexibel sein oder layoutSubviews verwenden, da Sie das Layout dort nach der endgültigen Größe vornehmen.

Wie von WDUK erwähnt, sollten alle Initialisierungs-Code / Objekt-Erstellung in Ihrer init-Methode oder irgendwo sein, aber nicht in layoutSubviews.

    
calimarkus 01.11.2012 12:56
quelle

Tags und Links