2014-09-17 11 views
8

Ho un progetto iOS universale che funziona perfettamente con Xcode 5 (iOS 6 & iOS 7). Io uso diversi storyboard per iPad & iPhone.viewDidLayoutSubviews loop infinito con iOS 8

Quando lo eseguo con Xcode 6 GM, funziona perfettamente con iPhone ma non funziona con iPad. Ho eseguito il debug e ho scoperto che c'è un problema con viewDidLayoutSubviews in UISplitViewController. Per esempio:

- (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; NSLog(@"run"); // some config with frame of child controllers }

E funziona continuamente e arresto di poco.

Chiunque ha lo stesso problema? Si prega di aiutare :(

Grazie

risposta

2

Ho avuto lo stesso problema - lo usavano per ridimensionare il master/dettaglio in UISplitViewCtrl

Per modificare la dimensione master/dettaglio provare questa nuova parametri in iOS 8,. per esempio in viewDidLoad:

self.minimumPrimaryColumnWidth = 500; 
self.maximumPrimaryColumnWidth = 500; 
self.preferredPrimaryColumnWidthFraction = 1; 
+0

Sei un risparmiatore di vita !!! Grazie –

3

quello che avevo visto che è ogni volta che si cambia il layout dei vostri elementi nella vista chiamerà i seguenti metodi:

viewWillLayoutSubviews; 
viewDidLayoutSubviews; 

se si modifica qualcosa nell'ultimo, lo chiamerà di nuovo;

2

Il codice che si trova all'interno di viewDidLayoutSubviews sovrascrive per i controller secondari è esso stesso a modificare le visualizzazioni secondarie della vista, e quindi fa in modo che viewDidLayoutSubviews venga richiamato nuovamente, e ancora e ancora.

Per evitare ciò, provare ad aggiungere una proprietà BOOL al proprio UISplitViewController per controllare l'esecuzione del codice di layout del controller figlio.

@interface UISplitViewController() 
... 
@property (nonatomic) BOOL subViewLayoutCalled; 
... 
@end 

Poi, nel tuo viewDidLayoutSubviews ...

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    NSLog(@"run"); 
    if (!self.subViewLayoutCalled) { 
     self.subViewLayoutCalled = YES; 
     // some config with frame of child controllers 
    } 
} 

Vale la pena di un andare.

Ho avuto lo stesso problema di recente.