Ist layoutSubviews aufgerufen, wenn view die Größe ändern?
In meinem Eindruck, mit autoresizesSubviews = JA, layoutSubviews sollte aufgerufen werden, jedes mal, wenn Blick die Größe ist geändert. Aber ich fand es ist nicht der Fall für meine Ansicht. Ist meine Erwartung falsch?
- Ist Grenzen geändert?
- Sorry für meine Schlampigkeit. Ich meine die Größe ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laut Quellen bei Apple,
"-[UIView layoutSubviews] sollte aufgerufen werden, wenn die Größe der Ansicht ändert."
Sie verwies mich auch an diese, aus der die View Programming Guide for iOS:
", Wenn die Größe der Ansicht ändert, UIKit gilt die autoresizing Verhaltensweisen, die Ansicht Unteransichten und ruft dann die Methode layoutSubviews der Ansicht, es zu lassen, auch manuelle änderungen vornehmen. Implementieren Sie die Methode layoutSubviews unter benutzerdefinierte Ansichten, wenn die autoresizing Verhalten selbst nicht liefern die Ergebnisse, die Sie wollen."
An diesem Punkt, am besten ist das erstellen einer kleinen Beispiel-Projekt, wo
layoutSubviews
nicht genannt (oder senden Sie Ihre bestehenden Projekt) - Datei ist ein Fehler mit Apple mit BugReporter, und enthalten, die Beispiel-Projekt mit dem bug.Wenn Sie etwas brauchen, um passieren, wenn Sie Ihre Ansicht geändert wird, können Sie auch überschreiben
setBounds:
undsetFrame:
für Ihre Klasse, um sicherzustellen, es geschieht. Es würde in etwa so AussehenDer andere Grund, warum ich manchmal diese Methoden überschreiben, die (vorübergehend) ist, so kann ich stoppen, im debugger zu sehen, Wann Sie tatsächlich abgerufen werden, und durch das, was code.
Aus meinem Verständnis, layoutSubviews wird aufgerufen, wenn die view Grenzen ändern. Dies bedeutet, dass, wenn seine position ändert in seinem superview (aber nicht seine Größe) dann layoutSubviews nicht geändert werden (da der Nullpunkt in den Grenzen ist in der Ansicht auf das Koordinatensystem - so ist es fast immer 0,0). In kurzen, nur eine änderung in der Größe wird dazu führen, dass dies die entlassen werden.
Wann immer Sie wollen, um die Größe der Ansichten manuell und automatisch geändert wird, rufen Sie layoutSubViews Methode