SplitViewController Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SplitViewController Problem

    Guten Tag,
    ich habe in meiner App einen TabBarController. Der erste Tab beinhaltet einen SplitViewController. Wenn ich nun den ersten Tab selektiere, das Gerät in den Portrait Modus drehe und dann auf einen anderen Tab gehe und das Gerät wieder in den Landscape Modus drehe und dann wieder auf den SplitViewController gehe, sieht der SplitViewController so aus (siehe Bild). Wenn ich das ganze mache aber Ausgangslage der Landscape Modus ist und ich es in den Portrait Modus drehe, sieht es so aus (siehe Bild 2). Was kann ich dagegen tun?
  • Es muss ja nur sein damit es funktioniert. Bzw es funktioniert ohne Tricks nur so. Es ist ja kein Design Guideline von Apple.

    McDan hatte mir mal einen Code geschickt mit dem man das ganze zwr nicht mit Tabbar aber dafür mit Toolbar machen konnte. Dürfte von Prinzip her der gleich Code sein. War aber auch ziemlich aufwendig gemacht. Viellecht ließt er das hier und hilft dir auch?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Mit setNeedsDisplay, setNeedsLayout funktioniert es nicht. Ich habe das so gemacht aber ohne Erfolg:

    Quellcode

    1. -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    2. UISplitViewController *splitViewController = [self.tabBarController.viewControllers objectAtIndex:0];
    3. //[splitViewController.view setNeedsDisplay];
    4. [splitViewController.view setNeedsLayout];
    5. }
  • Rotiert der SplitViewController korrekt, wenn dieser aktiviert ist und dann das iPad von Portrait nach Landscape und wieder zurück bzw. von Landscape nach Portrait und wieder zurück gedreht wird?

    Evtl. gibt es in Deiner App auch ein Problem mit den neuen View Rotation Settings, also z.B. supportedInterfaceOrientations usw.

    Prüfe mal, wann supportedInterfaceOrientations und willRotateToInterfaceOrientation:duration: im Master des SplitViewControllers beim Rotieren des iPads aufgerufen werden.
  • Also wenn er aktiviert ist funktioniert alles spitzte. willRotateToInterfaceOrientation:duration: funktioniert nur, wenn der SplitViewController aktiviert ist, sonst nicht. Aber um die Elemente zu platzieren nehme ich ja die Methoden vom SplitViewController:

    Quellcode

    1. -(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
    2. -(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:
  • Hm, dann scheint der TabBarController vor der Anzeige die InterfaceOrientation beim SplitViewController nicht zu setzen.

    Setze den AppDelegate mal als Delegate des TabBarControllers. In der Methode tabBarController:shouldSelectViewController: kannst Du dann per Code beim SplitViewController die aktuelle InterfaceOrientation setzen.
  • Wenn ich das jetzt so mache:

    Quellcode

    1. -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    2. if ([viewController isKindOfClass:[UISplitViewController class]]) {
    3. UISplitViewController *splitViewController = (UISplitViewController *) viewController;
    4. splitViewController.interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
    5. };
    6. return YES;
    7. }

    Kommt das splitViewController.interfaceOrientation nur readonly ist. Was muss ich anders machen?
  • Ich habe jetzt einen Link gefunden und damit funktioniert jetzt fast alles: objectiveseesharp.wordpress.co…tabbarcontroller-in-ios6/ Das einigste Problem ist, wenn ich das iPad in den Portrait Modus drehe und der Graph aktiviert ist, kommten folgende Fehler:
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetFillColorWithColor: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextGetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextFillRects: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSaveGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextFillRects: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextRestoreGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSaveGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextFillRects: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextRestoreGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSaveGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextFillRects: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextRestoreGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSaveGState: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextSetCompositeOperation: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextFillRects: invalid context 0x0
    Apr 28 12:13:02 iPad-von-Nils iCrip[3294] <Error>: CGContextRestoreGState: invalid context 0x0

    Die kommen aber erst seitdem ich die TabBar gesubclassed habe. Auf dem iPhone, wo die TabBar nicht gesubclassed ist, funktioniert es. Was kann ich dagegen tun?