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, cela fonctionne correctement. La barre de recherche apparaît sous la statusbar
barre de navigation et. Le tableview
apparaît sous la barre de recherche
Mais lorsque je l'exécute Xcode 5 sdk iOS 7
, la barre de recherche n'est pas visible (je pense qu'elle est placée sous la barre d'état et la barre de navigation), et la barre de navigation apparaît également sur la vue du tableau.
Sera-t-il corrigé avec iOS 7
une version stable?
Ou est-ce le problème de mon codage?
Ou devrions-nous le gérer en ajoutant la (y = statubar height + nav bar height)
valeur y pour 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ée et confirmée est que les limites de ma vue ne sont pas toujours redimensionnées pour tenir compte de la barre d'état et de la barre de navigation.
Dans viewDidLayoutSubviews, j'imprime les limites de la vue:
{{0, 0}, {320, 568}}
Cela fait apparaître mon contenu sous la barre de navigation et la barre d'état.
Je sais que je pourrais expliquer moi-même la hauteur en obtenant la hauteur de l'écran principal, en soustrayant la hauteur de la barre d'état et la hauteur de la barre de navigation, mais cela semble être un travail supplémentaire inutile.
Est-ce que quelqu'un d'autre a rencontré ce problème?
METTRE À JOUR:
J'ai trouvé une solution à ce problème spécifique. Définissez la propriété translucide de la barre de navigation sur NON:
self.navigationController.navigationBar.translucent = NO;
Cela empêchera la vue d'être encadrée sous la barre de navigation et la barre d'état.
Cependant, je n'ai pas trouvé de solution pour le cas où vous souhaitez que la barre de navigation soit translucide. Par exemple, en regardant une photo en plein écran, je souhaite que la barre de navigation soit translucide et que la vue soit encadrée en dessous. Cela fonctionne, mais lorsque je bascule l'affichage / le masquage de la barre de navigation, j'ai eu des résultats encore plus étranges. La première sous-vue (a UIScrollView
) voit ses limites et son origine changées à chaque fois.
Réponses:
Ce n'est pas tout à fait vrai. Une nouvelle propriété a été introduite dans iOS 7 qui vous permet d'ajuster le comportement de la disposition comme dans les versions précédentes d'iOS. Placez ce morceau de code dans votre contrôleur de vue, et vous devriez être prêt à partir! L'espace occupé par votre barre de navigation doit être pris en compte automatiquement
Vous devez ajouter ce qui précède dans votre
-(void)viewDidLoad
méthode.Remarque: vous devriez utiliser la dernière version GM d'iOS 7 et Xcode 5 maintenant, car l'API a changé depuis les versions bêta.
la source
Si vous travaillez dans Storyboard (ce que je recommande fortement!), C'est la solution: vous pouvez désactiver "Extend Edges" de votre ViewController dans le storyboard. Vous devez le faire pour chaque viewController. Vous pouvez désactiver les bords étendus en cliquant sur l'icône viewController dans stortyboard (en plus du productOwner sous la vue elle-même), puis en sélectionnant l'inspecteur d'attributs (comme le montrent les images).
Cela définira également les lignes d'alignement comme iOS 6.
Un autre excellent outil de xCode 5 est "Aperçu": cliquez sur le bouton majordome (assistant éditeur) et sélectionnez Aperçu. là, vous pouvez sélectionner iOS 6 et voir à quoi ressemblera la conception de votre storyboard sur iOS 6.
C'est tout simplement génial: D
[Mettre à jour]
Attention: la désactivation de «Prolonger les bords» peut entraîner une lueur noire 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 pression sur le bouton d'accueil). ceci peut être résolu en définissant la couleur d'arrière-plan de la barre de navigation sur blanc.
la source
Comme le dit l'OP, il existe une solution simple à cela qui consiste à définir la barre de navigation pour qu'elle soit opaque. Plutôt que de le faire dans le code, décochez simplement "Translucide" pour votre barre de navigation racine:
la source
self.edgesForExtendedLayout=UIRectEdgeNone;
Cela fonctionne sur le simulateur iOS 7 (Xcode 5 DP5)
la source
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
ces réponses ont toutes été utiles, en particulier celles de MQoder, mais pour moi, j'ai également dû définir la barre supérieure par défaut sur "navigation noire opaque".
la source
La réponse de @One Man Crew est correcte, mais:
Je recommanderais d'utiliser ce code pour éviter les erreurs lors de l'exécution de l'application sur les anciennes versions:
la source
Et vous devez le faire sur l'application AppDelegate #: didFinishLaunchingWithOptions:
Sinon, la couleur d'arrière-plan de la barre de navigation deviendra grise. Parce que la barre de navigation transparente chevauche la fenêtre.
la source
Si vous souhaitez conserver la transparence lorsque l'utilisateur fait défiler votre vue de tableau, vous pouvez définir le contentInset de celui-ci:
la source
Une solution consiste à utiliser le contrôleur de navigation. Cela résout automatiquement le problème. Utilisez également Xcode 5 au lieu des versions Xcode Preview car il s'agit de versions bêta.
la source