TableView Fullscreen bei TabBar

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

  • TableView Fullscreen bei TabBar

    Hallo Enwickler,

    ich habe einen TabBarCobtroller in dem sich ein Navigation Controller befindet, in dem sich ein TableViewController befindet.
    Gibt es eine Möglichkeit das TableView bei der Drehung in den Landscape so zu vergrößern, dass es die TabBar verdeckt und nur noch die NavigationBar darüber ist?
    Bei der Drehung zurück in den Portrait soll das TableView wieder "normal geoß" werden.

    Das hat den Hintergrund, dass meine App immer im Portrait läuft, aber das Eingeben von vielen Daten über die Portrait Tastatur ist ziemlich schwer.
    Es soll in dem einen TableViewController möglich sein den Text auch im Landscape einzugeben.
  • - (void)viewDidLoad
    {
    [super viewDidLoad];



    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(didRotate:)
    name:@"UIDeviceOrientationDidChangeNotification" object:nil];

    // Do any additional setup after loading the view, typically from a nib.
    }

    - (void) didRotate:(NSNotification *)notification
    {
    NSLog(@"rotate");
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)
    {
    // hide your tabbar
    }

    }


    stackoverflow.com/questions/52…o-hide-uitabbarcontroller
  • Wie kann ich die TabBar verstecken?

    Ich möchte die Drehung des Views nur in einigen ViewControllern erlauben, in allen anderen nicht.
    Muss ich dazu im TabBarController und in den rotierbaren die supportedInterfaceOrientations setzten und in den anderen nur Portrait?
  • Danke,

    ich habe es jetzt hinbekommen, dass sich das komplette View dreht und die TabBar verschwindet.
    Das Problem ist jetzt nur, dass sich ALLE Views meiner App drehen.

    Deshalb hatte ich die Idee einen PortraitNavigationController zu machen und in diesem bei den supportedInterfaceOrientations nur Portrait zu erlauben.
    Diesen speziellen NavigationController würde ich bei allen anderen Tabs einsetzten. Das Problem: es funktioniert nicht.

    Ich habe es so verstanden, dass wenn ein ViewController in der Hierarchie die geforderte Orientation nicht unterstützt, dass eine Drehung des Views dann nicht möglich ist.
    Wieso lässt sich der ViewController trotzdem drehen wenn der NavigationController nur Portrait erlaubt?
  • Vyax schrieb:

    Ich habe es so verstanden, dass wenn ein ViewController in der Hierarchie die geforderte Orientation nicht unterstützt, dass eine Drehung des Views dann nicht möglich ist.

    Das ist richtig für iOS Versionen bis iOS 5.x.

    Vyax schrieb:

    Wieso lässt sich der ViewController trotzdem drehen wenn der NavigationController nur Portrait erlaubt?

    Weil sich unter iOS 6 das Handling der View Rotations grundlegend geändert hat. Das war hier nach der Veröffentlichung von iOS 6 ein Dauerbrenner Thema.

    Michael
  • Das heißt, dass ich das direkt in meinem TabBarController limitieren muss.
    Aber der will sich nur in manchen Situationen drehen. Wäre es sinnvoll eine passende Subclass zu erstellen?
  • Bis jetzt habe ich es so hinbekommen:

    Quellcode

    1. - (void)didRotate:(NSNotification *)notification
    2. {
    3. if (UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation))
    4. {
    5. [UIView beginAnimations:nil context:NULL];
    6. [UIView setAnimationDuration:0.5];
    7. for (UIView *view in self.tabBarController.view.subviews)
    8. {
    9. if ([view isKindOfClass:[UITabBar class]])
    10. {
    11. view.frame = CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49.0, view.frame.size.width, view.frame.size.height);
    12. break;
    13. }
    14. }
    15. self.tableView.frame = CGRectMake(0.0, 0.0, 320.0, [UIScreen mainScreen].bounds.size.height - 20.0 - 44.0 - 49.0);
    16. }
    17. else
    18. {
    19. [UIView beginAnimations:nil context:NULL];
    20. [UIView setAnimationDuration:1.5];
    21. for (UIView *view in self.tabBarController.view.subviews)
    22. {
    23. if ([view isKindOfClass:[UITabBar class]])
    24. {
    25. view.frame = CGRectMake(view.frame.origin.x, [UIScreen mainScreen].bounds.size.height - 49.0, view.frame.size.width, view.frame.size.height);
    26. break;
    27. }
    28. }
    29. self.tableView.frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.height, 254.0);
    30. }
    31. [UIView commitAnimations];
    32. }
    Alles anzeigen


    Es gibt nur noch ein kleines Problem.
    Bei der Drehung in den Landscape verdeckt der schwarze Bereich der TabBar das TableView.
    Wie kann ich das verhindern? Eigentlich befindet sich an dieser Stelle kein View, sollte es noch eigentlich nicht verdeckt werden.
  • Dieser schwarze Balken überdeckt einfach mein TableView, ich hab aber keine Ahnung was der ist.
    Die TabBar kann es eigentlich nicht sein, da sie sich ausserhalb des sichtbaren Bereiches befindet.
    Der Bereich ist aber genau 49.0 hoch. Kann das sein, dass da etwas von der TabBar hängengeblieben ist?