2014-09-17 16 views
8

Ich habe ein universelles iOS-Projekt, das perfekt mit Xcode 5 (iOS 6 & iOS 7) läuft. Ich benutze verschiedene Storyboard für iPad & iPhone.viewDidLayoutSubviews Endlosschleife mit iOS 8

Wenn ich es mit Xcode 6 GM laufen lasse, funktioniert es perfekt mit iPhone aber funktioniert nicht mit iPad. Ich debuggte ich fand, dass es ein Problem mit viewDidLayoutSubviews in UISplitViewController gibt. Zum Beispiel:

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

Es läuft kontinuierlich und nur knapp sein Ziel zu stoppen.

Jeder hat das gleiche Problem? Bitte helfen :(

Danke

Antwort

2

ich hatte das gleiche Problem - verwendet es die Master/Detail in UISplitViewCtrl, um die Größe

Um die Größe Master/Detail dieses neue Parameter in ios8 versuchen zu ändern. in zum Beispiel viewDidLoad:

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

Sie sind ein Lebensretter !!! Vielen Dank –

3

Was ich gesehen hatte, jedes Mal wenn Sie das Layout Ihrer Elemente in der Ansicht ändern wird es die folgenden Methoden aufrufen es:

viewWillLayoutSubviews; 
viewDidLayoutSubviews; 

Wenn Sie etwas in das letzte ändern, wird es erneut aufgerufen.

2

Der Code, den Sie in der ViewDidLayoutSubviews-Überschreibung für die untergeordneten Controller haben, ändert selbst die Unteransichten der Ansicht und löst so aus, dass viewDidLayoutSubviews erneut aufgerufen wird und wieder und wieder.

Um dies zu verhindern, fügen Sie Ihrem UISplitViewController eine BOOL-Eigenschaft hinzu, um die Ausführung des Layoutcodes für untergeordnete Controller zu steuern.

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

Dann in Ihrem viewDidLayoutSubviews ...

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

Es ist einen Versuch wert.

Ich hatte das gleiche Problem in letzter Zeit.