11
votes

masquer les tabbar lors de la rotation du périphérique iPhone sur le paysage

Voici donc ce que j'ai: Un uitabbarcontroller qui gère différents UIViewControlers. Dans l'un des UIVIEWCONTROLLER, j'essaie de changer la vue affichée lorsque l'appareil tourne au paysage. La partie importante est que la vue affichée dans le paysage doit prendre tout l'écran ...

J'ai correctement implémenté les méthodes: xxx

en fait, j'ai une rotation se produisant correctement, et je mes vues échangées. Je cache même la barre d'état, la barre de navigation et la barre d'onglets, mais je continue d'avoir un espace vide au bas de l'écran qui est le lieu de la barre d'onglets ...

donc je suppose que le réglage de la propriété cachée de la barre d'onglets ne suffit pas pour avoir la vue sur l'écran entier. Je pense qu'il y a des choses à faire dans le tabbarcontroller ou même le MainWindow pour dire quelque chose comme "Je n'ai pas besoin de tabbarcontroller maintenant". Mais je ne vois pas comment se déplacer correctement ce problème.

Si quelqu'un a été autour de cette question, j'apprécierais de l'aide.

Merci, Sami.


1 commentaires

Stackoverflow.com/a/65539379/14414215 Réponse de Xcode12 et 2020


8 Réponses :


33
votes

cela a fonctionné pour moi. xxx


1 commentaires

Utilisez oui / non au lieu de true / false . Bien que cela fonctionne, ce n'est pas la convention.



0
votes

Ce code fonctionne bien, mais lorsque je rejette un UIViewController qui est présenté model, ma vue est sous la barre d'état de 20 pixels. Ma vue est à l'intérieur d'une navigationController, donc je ne le cache pas avant la rotation.


1 commentaires

J'ai compris que le problème est lié à la barre de navigation et uniquement dans iOS 5.Si vous subirez des problèmes similaires, il vous suffit de masquer et de montrer votre barre de navigation par conséquent dans la viewwillappear.



1
votes
  • La solution ci-dessus a fonctionné pour moi aussi quelques-uns quelques modifications de IOS6 et supérieures:
  • dans iOS6 Supprimer la ligne: "PrécédentRect = Self.View.frame;"
  • remplacer également "animé:" avec "Withanimation:"
  • et supprimer "transvironnez-vous = précédentRect;" de la fonction inférieure (dans la fonction d'autre)
  • Cela fonctionne pour moi de cette façon. Et un grand merci à l'utilisateur UB.

0 commentaires

0
votes

J'avais besoin d'une barre d'onglets pour entrer en mode plein écran dans la vue Paysage et j'ai essayé l'approche suggérée ci-dessus en utilisant

transvienf.frame = cgrectument (0, 0, 480, 320);

Cela s'est avéré être une solution hacky et posa de nombreux problèmes tels que la cachette et la réaffichage de la barre d'état (la vue se chevaucherait avec la barre d'état lorsqu'elle est réaffichée après une sortie de portrait). Je ne recommanderais pas cela. Ce qui a fonctionné pour moi parfaitement à la fin, poussait un nouveau contrôleur de vue contenant la vue paysagiste et utilise la délégation pour réutiliser la fonctionnalité de la VC d'origine.


0 commentaires

-1
votes

Si vous avez votre uitabbarController, mettez une uoinavigationController à l'intérieur, vous pouvez utiliser Hidesbottombarwhenpushed (avec un peu de scandale) pour le faire. XXX PRE>

L'astuce consiste à appuyer sur votre contrôleur de vue afin de repousser votre contrôleur d'affichage. que le drapeau hadesbottombarwhenpushed code> est ramassé. Vous pouvez utiliser la suite. P>

self.navigationController.viewControllers = self.navigationController.viewControllers;


0 commentaires

0
votes

Cette approche fonctionne pour moi:

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    UIView *parentView = self.tabBarController.view;
    CGRect frame = parentView.frame;
    CGFloat windowHeight = parentView.window.frame.size.height;

    switch (toInterfaceOrientation) {
        case UIInterfaceOrientationLandscapeLeft:
        case UIInterfaceOrientationLandscapeRight:
            CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
            frame.size.height = windowHeight + tabBarHeight;
            break;
        default:
            frame.size.height = windowHeight;
            break;
    }

    [UIView animateWithDuration:duration animations:^{
        parentView.frame = frame;
    }];
}


3 commentaires

J'ai ce code dans une application de production très bien. Que vois-tu? Quelle version de iOS 8?


Essayé IOS 8.2 Simulator La barre d'onglets est affichée pendant la rotation. BTW Quelle est la logique: lors de la rotation de la hauteur de la barre de la barre de la barre de la fenêtre?


Je ne l'ai pas essayé dans le simulateur (utilise des frameworks qui ne sont pas construits pour cette plate-forme), mais fonctionnent simplement sur des périphériques dans iOS 8.1 / 8.2 / 8.3. La logique consiste à augmenter la hauteur de la fenêtre par la hauteur de la barre d'onglets lors de la rotation de l'orientation du paysage de sorte que la fenêtre soit suffisamment grande que l'écran de l'appareil suffisamment de telle sorte que la barre d'onglets soit rendue décrégnée (et annuler le changement de hauteur lors de la rotation du portrait).



0
votes

Sous-classe Votre tabbarController et masquez la barre à onglet en cas de besoin:

class tabBarVC: UITabBarController {

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        if size.height < size.width {
            self.tabBar.hidden = true
        } else {
            self.tabBar.hidden = false
        }
    }

}


0 commentaires

0
votes

Peut-être que vous souhaitez utiliser ce

- (void)willAnimateRotationToInterfaceOrientation:UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];

    __block UIView *weakTabBar = [self.tabBarController.view.subviews objectAtIndex:1];
    weakTabBar.alpha = 0;
    [UIView animateWithDuration:duration
                          delay:0
                        options:UIViewAnimationOptionCurveEaseIn // slow at the beggining
                     animations:^{
                         weakTabBar.alpha = 1;
                     }
                     completion:^(BOOL finished) {
                         weakTabBar.alpha = 1;
                     }];
    }


0 commentaires