2010-12-10 37 views
1

Fondamentalement, j'ai poussé un UIViewController en plein écran dans un UINavigationController et voudrais basculer si le navigationBarHidden est apparu. Cependant, je trouve qu'après avoir réglé navigationBarHidden sur YES, l'UIView glisse sur 44 pixels pour faire de la place à la navigationBar. Comment désactiver ce comportement? Comme j'ai déjà mis barStyle à UIBarStyleBlackTranslucent et que le glissement n'est vraiment pas nécessaire.Comment empêcher UIView de glisser un peu lorsque navigationBarHidden est défini sur YES

//init viewController 
[self.navigationController pushViewController:viewController animated:YES]; 

Modifier:

Je traite aussi de pousser un scrollview à contrôleur de navigation .. je trouve que après avoir réglé la barre de navigation pour être visible. Ma vue défilera un peu plus bas, lorsque je défilerai la vue manuellement dans cet état, le scrollView lui-même va glisser vers le haut. Ma question est comment empêcher le scrollView de glisser vers le bas.

La taille de l'image est la même avant que la vue ne glisse vers le haut ou vers le bas.

Répondre

1

J'ai résolu ce problème en ajoutant le scrollView à un UIView et en définissant le UIView comme vue de UIViewController.

0

Je pense que c'est un bug/une caractéristique de UINavigationController et je ne connais aucun moyen de le désactiver. Ça craint. J'ai toujours dû réajuster mes vues manuellement. C'est beaucoup plus douloureux que cela ne devrait l'être pour les rotations, défiler les vues ....

+0

Malheureusement, je suis également en train de pousser un scrollview au contrôleur de navigation.Je trouve cela après avoir réglé la barre de navigation pour être visible. Ma vue défilera un peu plus bas, lorsque je défilerai la vue manuellement dans cet état, le scrollView lui-même va glisser vers le haut. Avez-vous une idée? – overboming

1

Essayez de réinitialiser le cadre de vue. Faites quelque chose comme ça après avoir défini la barre cachée:

viewController.frame = self.navigationController.frame; 

Vous pouvez toujours casser là-bas et voir ce que les valeurs sont et pourraient même construire un cadre personnalisé en conséquence pour le faire rentrer. J'ai dû faire cela auparavant ...

+0

Je peux réinitialiser l'image après avoir défini les boutons de navigation à masquer, mais comment puis-je empêcher la vue de glisser vers le bas car les boutons de navigation sont comme une vue de superposition? – overboming

0

Ajoutez la ligne suivante dans votre méthode de viewDidLoad:

self.wantsFullScreenLayout = YES;

Il indique au contrôleur de vue de placer déjà sous la barre subviews de navigation.

0

Cela peut avoir un rapport avec contentInset. Lors de la définition de la propriété navigationBarHidden, si la vue racine du contrôleur de vue en cours est une vue de défilement, sa propriété contentInsets.top est définie sur la hauteur des barres supérieures. Pour éviter cela, immédiatement après la ligne qui modifie navigationBarHidden, réinitialisez self.scrollView.contentInset à la valeur d'origine que vous avez.

0

Aucune des réponses ici n'a fonctionné pour moi. Au lieu de cela, vous pouvez réinitialiser l'encart sur la UIScrollView pendant viewDidLayoutSubviews() comme on le voit ci-dessous (à Swift):

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    // prevent the scrollview from adding some inset for the status bar 
    self.detailScroll.contentInset = UIEdgeInsetsZero 
} 
0

I a essayé, qui fonctionne seulement ce mouvement navigationBar avec son origine y, et de modifier l'alpha de navigationBar subviews à 0 .F; si vous voulez le montrer en arrière, il suffit de le faire

0

self.navigationController.navigationBar.alpha = 0.0;

cela peut être une solution facile