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.
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! :)
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% 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.
Tags und Links objective-c ios xcode ios-autolayout