112 votes

La barre de navigation apparaît sur les vues avec un nouveau SDK iOS7

CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

Dans les versions antérieures qu'il fonctionne correctement. La barre de recherche apparaît ci-dessous l' statusbar et la barre de navigation. L' tableview apparaît en dessous de la barre de recherche

Mais lorsque je l'exécute sur l' Xcode 5 sdk iOS 7, la barre de recherche n'est pas visible (je pense qu'il est placé sous la barre d'état et la barre de navigation) , et aussi la barre de navigation apparaît sur l'affichage de la table.

Il sera fixé avec de la iOS 7 version stable ?

Ou est-ce un problème de mon codage ?

Ou devons-nous traiter en ajoutant la y (y = statubar height + nav bar height) valeur iOS 7 ?

J'ai récemment téléchargé Xcode 5 DP pour tester mes applications sous iOS 7. La première chose que j'ai remarqué et confirmé est que mon point de vue de limites n'est pas toujours redimensionnée pour tenir compte de la barre d'état et la barre de navigation.

Dans viewDidLayoutSubviews, j'ai l'impression de la vue de limites:

{{0, 0}, {320, 568}}

Cela se traduit dans mon contenu apparaissant en dessous de la barre de navigation et la barre d'état.

Je sais que je pourrais en compte la hauteur de moi-même par l'obtention de l'écran principal, la hauteur, la soustraction de la barre d'état de la hauteur et de la barre de navigation de la hauteur, mais cela me semble inutile de travail supplémentaire.

Quelqu'un d'autre a rencontré ce problème?

Mise à JOUR:

J'ai trouvé une solution pour ce problème spécifique. Réglez la barre de navigation est translucide propriété:

self.navigationController.navigationBar.translucent = NO;

Cela permettra de fixer le point de vue d'être formulée sous la barre de navigation et la barre d'état.

Cependant, je n'ai pas trouvé une correction pour le cas où vous souhaitez que la barre de navigation pour être translucide. Par exemple, l'affichage d'une photo en plein écran, je tiens à avoir la barre de navigation translucide, et la vue à être encadrées-dessous. Cela fonctionne, mais lorsque je bascule montrer/cacher la barre de navigation, j'ai vécu encore plus étrange des résultats. Le premier sous-vue ( UIScrollView) obtient ses limites l'origine y sont changés tous les temps.

188voto

One Man Crew Points 5078

Ce n'est pas tout à fait vrai. Il y a eu une nouvelle propriété introduit dans l'iOS 7 qui vous permet d'ajuster la mise en page de comportement comme dans les précédentes versions d'iOS. Placer ce bout de code dans votre vue-contrôleur, et vous devriez être bon d'aller! L'espace de votre barre de navigation prend devraient être pris en compte automatiquement

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

Vous avez besoin ajouter le au-dessus de votre -(void)viewDidLoad méthode.

Remarque: Vous devez utiliser la dernière GM version de l'iOS 7 et Xcode 5 maintenant, depuis que l'API a changé depuis les versions beta.

37voto

MQoder Points 268

Screenshot from storyboard

enter image description here

Si vous travaillez dans un scénario (que je recommande vivement!) c'est la solution: Vous pouvez désactiver les "Arêtes" de votre ViewController dans le storyboard. Vous devez faire cela pour chaque viewController. Vous pouvez désactiver l'étendue des bords en cliquant sur le viewController icône dans stortyboard (outre le productOwner en dessous de la vue elle-même), puis en sélectionnant les attributs de l'inspecteur (Comme les images).

Cela permettra également de définir les lignes d'alignement comme iOS 6.

Un autre excellent outil dans xCode 5 est "Aperçu": cliquez sur le majordome Bouton (rédacteur adjoint) et sélectionnez Aperçu. de là, vous pouvez sélectionner l'iOS 6 et de voir comment votre scénario de conception sera comme sur iOS 6.

Son tout simplement génial:D

[Mise à jour]

Attention: la désactivation des "Arêtes" pourrait entraîner une lueur noir sur la barre de navigation lorsque l'application entre en arrière-plan sur iOS7. la lueur sera également visible sur la vue multitâche (double appuyez sur le bouton home). ce problème peut être résolu par le réglage de la couleur d'arrière-plan de la navigation de la barre de vue de blanc.

[self.navigationController.view setBackgroundColor:[UIColor whiteColor]];

12voto

Bids Points 1675

Comme le dit l’OP, il y a une solution simple à ce qui est de placer la barre de navigation pour être opaque. Plutôt que de faire cela dans le code, il suffit de décocher « Translucide » pour votre barre de navigation de racine :

enter image description here

8voto

yhlin Points 114

``

Il fonctionne sur simulateur iOS 7 (Xcode 5 DP5)

2voto

jasonpurdy Points 86

ces réponses étaient tous utiles, en particulier des MQoder, mais pour moi, j’ai eu également de placer la barre haut de la page par défaut à « navigation noire opaque ».

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X