2017-06-01 2 views
0

Ich brauche ein wenig Hilfe, um die viewDidLAyoutSubviews Methode zu verstehen und wie man es sicher verwendet.Call-Methode einmal nach viewDidLayoutSubviews

Ich muss einige meiner Subviews programmatisch vor der viewDidAppear Methode bearbeiten. Und damit es richtig funktioniert, muss ich natürlich warten, bis die gezielten Subviews fertig sind, bevor ich sie bearbeite.

Jetzt dachte ich, das war, was die viewDidLayoutSubviews-Methode war, aber als ich es getestet habe, fand ich heraus, dass es tatsächlich zweimal vor meiner viewDidAppear Methode aufgerufen wurde. Ich habe versucht, meine Subviews nur beim ersten Mal viewDidLayoutSubviews wurde aufgerufen, weil ich nur [self editMySubviews] einmal ausführen möchte, aber dann war die gezielte Subview nicht fertig und es wurde vermasselt. Dies ist, wie ich versucht:

- (void)viewDidLayoutSubviews { 
    if (!myBoolean) { 
     [self editMySubviews]; 
     myBoolean = YES; 
    } 
} 

Natürlich, wenn ich die if-statement es andockt beim nächsten Mal das Verfahren entfernen genannt wird, aber ich möchte nur [self editMySubviews] einmal aufgerufen werden.

Also meine Frage ist, wenn ich die [self editMySubviews] Methode vor der viewDidAppear Methode aufrufen kann und 100% sicher bin, dass alle Teilansichten bearbeitet werden können? Jetzt wird in meinem Fall die viewDidLayoutSubviews zweimal vor viewDidAppear aufgerufen, aber wird das immer der Fall sein? Ist es sicher, einfach [self editMySubviews] nach dem zweiten Mal viewDidLayputSubviews aufgerufen wird?

+0

Was machst du in 'editMySubviews' hinzufügen? – dan

+0

Bearbeiten Sie einige Tasteneinschränkungen gemäß seiner superView.frame.size.width, die auf verschiedenen Geräten unterschiedlich ist – Peter

+0

Dann warum müssen Sie es nur einmal tun? Sie sollten es jedes Mal tun, wenn sich das Subview-Layout ändert, wenn sich die Superview-Größe ändert. – dan

Antwort

0

nach Ihren Kommentar gesagt, Sie

einige Schaltfläche Einschränkungen bearbeiten nach seiner superView.frame.size.width, die auf verschiedenen Geräten unterschiedlich ist

Nach viewDidLoad Sie die richtige Größe von view.bounds bekommen so können Sie leicht/update-Einschränkung festgelegt und am Ende dieses Aufrufs
setNeedsUpdateConstraints und layoutIfNeeded Methode

Verwandte Themen