web-dev-qa-db-fra.com

Mise en page automatique et "Masquer la barre inférieure en cas de poussée"

La structure (simplifiée) de mon application est la suivante:

UITabBarController avec une UINavigationController tenant une UITableViewController en tant que contrôleur de vue racine. 

lorsque vous appuyez sur l’une des cellules du contrôleur d’affichage de table, I Poussez une extrémité UIViewController régulière (permet de l’appeler VC) en masquant la barre d’onglet inférieure. (en utilisant l'indicateur "Masquer la barre inférieure lorsque poussé") 

Dans le storyboard, j'ai ajouté une sous-classe UIView régulière à VC qui ressemble à une barre inférieure et j'utilise la mise en page automatique pour l'épingler au bas de la vue VC. 

Le problème
Lorsque j'appuie sur VC, il faut une seconde pour que cette vue apparaisse au bas de la page. Cela ressemble à une mise en page automatique. La barre d'onglets est masquée et la déplace au bas de la vue. 

Je sais que ce n'est pas la meilleure explication, alors j'ai ajouté un projet très simple pour illustrer le problème. 

38
Eyal

Le problème vient de cette contrainte spécifique qui se situe entre la vue et le haut du guide de disposition inférieur. 

enter image description here

Sélectionnez la contrainte et éditez sa propriété "Second Item"

enter image description here

Ici vous devez choisir le fond

enter image description here

Une fois que vous avez cela, la vue rose n'est plus influencée par le guide de disposition. Le guide de disposition semble reconnaître que la barre d'onglets est masquée uniquement lorsque la vue racine du contrôleur de vue avancée est dans les limites de l'écran principal, ce qui ne se produit qu'une fois l'animation terminée. 

Et c’est la raison pour laquelle la hiérarchie des vues doit être redéfinie, ce qui provoque l’animation indésirable. 

61
Earl Grey

La réponse acceptée ne fonctionnait pas pour moi (l'option n'était pas disponible). Cependant, j'ai trouvé une autre solution. (basé sur Masquer la barre inférieure lorsque poussé dans Autolayout )

Sélectionnez la vue et l'objet à aligner (dans mon cas btnShare) et ajoutez une nouvelle contrainte d'alignement (bords inférieurs).

 enter image description here  enter image description here

32
Vincenzo

Hi in Storyboard, sélectionnez Barre d'onglets (Est-ce que Contrôleur Barre d'onglets Scène> Contrôleur Barre d'onglets> Barre d'onglets), désélectionnez la case Translucide dans l'inspecteur d'attributs. Cette action résout votre problème. (Mais il y a beaucoup de choses, "Masquer la barre inférieure quand poussé" est à la barre d'outils).

14
Onik IV

Sélectionnez votre "Contrôleur de navigation" et dans "Inspecteur d'attributs", décochez la case "Sous les barres inférieures".

6
Arash

SI vous ne pouvez pas sélectionner bottomlayoutguide bottom dans votre Xcode 7+

 like there Il suffit de faire ce qui suit:

 open in editor recherchez l'identifiant de votre contrôleur 

 search in source file find <layoutGuides>, tapez <bottom>, copiez-le id

 find layoutGuides recherche par id change l'attribut de haut en bas

 find and replace prendre plaisir.

Dans le storyboard, accédez au contrôleur de vue dont vous voulez masquer la barre d'onglets, cliquez sur Attribute Inspector et sélectionnez Masquer la barre inférieure lorsque vous appuyez sur. Vérifiez l'image ci-dessous.

 storyboard example

2
Mário Carvalho

Si vous voulez que la barre d’onglet soit masquée, vous pouvez ajouter ce code à votre contrôleur,

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = YES;
}

Vous devrez également mettre ce code (mais en passant NO) dans le contrôleur où vous voulez que la barre d'onglets soit visible. Vous devez également décocher la case "Masquer la barre inférieure lorsque vous êtes poussé" dans IB. 

Après édition:

Vous obtiendrez une meilleure animation si, dans le premier contrôleur, vous animez la valeur alpha de la barre d’onglet non masquée de 0 à 1 sur une courte période. Cela a l'air bien si vous revenez en arrière avec le bouton de retour. Si vous souhaitez utiliser le balayage arrière, vous devrez faire quelque chose de plus compliqué avec interactivePopGestureRecognizer.

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = NO;
    self.tabBarController.tabBar.alpha = 0.0;
    [UIView animateWithDuration:.4 animations:^{
        self.tabBarController.tabBar.alpha = 1.0;
    }];
}
2
rdelmar

définir UINavigationBar Translucent avec NO.

comme ceci: self.navigationController.navigationBar.translucent = NO;

1
taitanxiami
-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tabBarController.tabBar.hidden = NO;
    self.tabBarController.tabBar.alpha = 0.0;
    [UIView animateWithDuration:.3 animations:^{
        self.tabBarController.tabBar.alpha = 5.0;
    }];
}
1
Breno Morais

Essayez d’épingler le bas de votre vue en bas de la vue d'ensemble et non en bas

0
Karthik Rao