Wird layoutSubviews immer aufgerufen, wenn die Größe der Ansicht geändert wird?

8

In meinem Eindruck sollte layoutSubviews bei autoresizesSubviews = YES jedes Mal aufgerufen werden, wenn die Größe der Ansicht geändert wird. Aber ich habe festgestellt, dass dies meiner Ansicht nach nicht der Fall ist. Ist meine Erwartung falsch?

    
an0 04.09.2011, 00:15
quelle

4 Antworten

6

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.

    
Mike Hay 06.09.2011, 17:09
quelle
1

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

%Vor%


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.

    
Mike Hay 04.09.2011 20:07
quelle
0

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.

    
dtuckernet 04.09.2011 01:38
quelle
-1

Wenn Sie die Größe der Ansichten manuell ändern und die Größe automatisch ändern möchten, rufen Sie die Methode layoutSubViews

auf %Vor%     
Mahesh Aswathanarayana 11.09.2013 13:59
quelle

Tags und Links