Laut Quellen bei Apple
"- [UIView layoutSubviews] sollte aufgerufen werden, wenn sich die Größe der Ansicht ändert."
Sie verwiesen mich auch dazu aus dem View Programming Guide für iOS:
"Wenn sich die Größe einer Ansicht ändert, wendet UIKit das autorisierende Verhalten der Unteransichten dieser Ansicht an und ruft dann die layoutSubviews-Methode der Ansicht auf, um manuelle Änderungen vorzunehmen. Sie können die layoutSubviews-Methode in benutzerdefinierten Ansichten implementieren, wenn Das Autoresizing-Verhalten selbst führt nicht zu den gewünschten Ergebnissen. "
An diesem Punkt ist es am besten, ein kleines Beispielprojekt zu erstellen, in dem layoutSubviews
keine Datei mit Apple aufgerufen wird (oder ein bestehendes Projekt sendet), indem Sie BugReporter , und fügen Sie dieses Beispielprojekt mit Ihrem Bug hinzu.
Wenn bei der Größenänderung Ihrer Ansicht etwas passieren soll, können Sie auch setBounds:
und setFrame:
überschreiben, um sicherzustellen, dass dies geschieht. Es würde ungefähr so aussehen
Der andere Grund, warum ich diese Methoden (vorübergehend) überschreibe, ist, dass ich im Debugger anhalten kann, um zu sehen, wann sie aufgerufen werden und nach welchem Code.
Nach meinem Verständnis wird layoutSubviews aufgerufen, wenn sich die Grenzen der Ansicht ändern. Dies bedeutet, dass LayoutSubviews nicht geändert wird, wenn sich seine Position in der Superansicht (aber nicht in der Größe) ändert (da der Ursprungspunkt in den Grenzen im Koordinatensystem der Ansicht liegt - also fast immer 0,0). Kurz gesagt, nur eine Änderung der Größe wird dazu führen, dass dies ausgelöst wird.
Wenn Sie die Größe der Ansichten manuell ändern und die Größe automatisch ändern möchten, rufen Sie die Methode layoutSubViews
auf %Vor%Tags und Links ios cocoa-touch uiview