Wenn die Randbedingungen für die automatische Auslagerung Frames während des Lebenszyklus des View-Controllers festlegen?

8

Ich habe die Einschränkungen für die automatische Belichtung vom Storyboard verwendet. In einigen Fällen möchte ich jedoch die dynamische Höhe der Unteransicht berechnen. Ich code dies in viewDidAppear (), es funktioniert gut, weil diese Methode aufgerufen wird, nachdem alle Ansicht Frames von Layout-Einschränkungen festgelegt sind. Das Problem hier ist, dass ich den Frame für eine halbe Sekunde durch Constraints sehen kann. Und dann gruppiert der Code die Ansicht neu.

Ich habe von viewDidLayout () erfahren, das nach constraints aufgerufen wird, um den Frame zu setzen, damit ich ihn ändern kann. Aber es funktioniert nicht. Es ist wie diese Methode aufgerufen wird, bevor Bedingungen verwendet werden.

    
Hiren Prajapati 21.03.2016, 07:17
quelle

3 Antworten

7

Die Methode viewDidAppear wird am Ende des Lebenszyklus der Ansicht aufgerufen. Wenn Sie die Einschränkungen hier ändern, wird es immer sichtbar sein.

Wenn die Änderung, die Sie vornehmen möchten, ein einmaliges Ereignis ist, können Sie dies in der Methode viewWillAppear tun. Dies wird jedoch nicht immer helfen, da die Ansichtszeichnung zu diesem Zeitpunkt möglicherweise nicht immer fertig ist. Daher ist es besser, den Code in viewWillLayoutSubviews oder viewDidLayoutSubviews zu platzieren.

HINWEIS: viewWillLayoutSubviews oder viewDidLayoutSubviews werden im Lebenszyklus einer Ansicht mehrfach aufgerufen, z. B. bei der Änderung der Ausrichtung oder beim Ein- und Ausblenden aus einer anderen Ansicht oder bei jedem Rahmenwechsel.
Wenn die Codeänderung, die Sie hier einfügen möchten, ein einmaliges Ereignis ist, dann achten Sie bitte darauf, Flags zu verwenden.

zB: -

%Vor%

Hoffe, das hilft! :)

    
GoGreen 05.04.2016, 05:07
quelle
3

Wie der Name schon andeutet, wird viewDidLayoutSubviews aufgerufen, wenn die Ansicht Ihres viewControllers gerade fertig ist und Sie davon ausgehen können, dass sich Ihre Ansichten in dieser dynamischen Höhe an den richtigen Stellen / Frames befinden, abhängig von Ihren automatischen Layoutbedingungen.

%Vor%     
Anil Kukadeja 21.03.2016 08:03
quelle
0

Ich bin mir nicht sicher, was Sie eigentlich in viewDidLayoutSubviews() machen wollen. Ich benutze immer, um die Ansicht anzupassen, indem ich Layout-Constraint-Werte ändere, die diese Methode überschreiben.

%Vor%     
Sauvik Dolui 21.03.2016 07:23
quelle