IPhone - Après avoir écarté Modal-Vue-Contrôleur - gap est à gauche au haut de la page
Lors du démarrage de l'application, si l'utilisateur ne possède pas les informations de connexion stockées, je veux afficher un modal-vue-contrôleur de forcer l'entrée de cette information. J'ai trouvé par essai et erreur, que cela a dû se produire dans viewDidAppear de ma racine-vue-contrôleur. J'ai essayé de le mettre dans le viewDidLoad et viewWillAppear, mais ceux qui n'ont pas de travail, sauf si j'ai affecté la vue de la vue racine contrôleur à la vue de la manette de navigation utilisé dans le modal qui a ensuite causé d'autres problèmes...
J'ai donc:
- (void)viewDidAppear:(BOOL)animated
{
NewAccountViewController *newAccountViewController = [[[NewAccountViewController alloc] initWithNibName:@"NewAccountViewController" bundle:nil] autorelease];
UINavigationController *accountNavigationController = [[UINavigationController alloc] initWithRootViewController:newAccountViewController];
[self presentModalViewController:accountNavigationController animated:YES];
}
Et dans le newAccountViewController j'ai un simple élément de navigation bouton qui rejette le modèle-vue-contrôleur avec dismissModalViewController.
Tout cela fonctionne et quand le modal est rejeté une vue dans une manette de navigation est visible avec son élément de navigation de titre en haut....
Mais il y a un espace blanc à propos de la même taille que la barre d'état entre la barre d'état et le haut de la blue élément de navigation de la barre. Si je ne fais pas le modal, l'écart n'est jamais là. Il se produit uniquement après le modal est présenté et rejeté. J'ai essayé de faire d'animation:PAS sur le présent et dismissModalViewController. J'ai aussi essayé de ne pas utiliser la manette de navigation dans le modal, et qui n'a rien fait ainsi. Toutes les idées serait génial! Merci.
- Je n'ai pas testé cette hypothèse, mais il peut être le cas ou non le réglage de la fenêtre de la clé est lié à ce. Vous devez toujours définir comme la clé de la fenêtre à l'aide de [UIWindow makeKeyAndVisible] dans votre application délégué applicationDidFinishLaunching: la méthode. Si vous oubliez de le faire, quelques subtils changements de comportement peuvent se produire, y compris éventuellement cette barre de statut chose.
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Ma solution a été de fermer temporairement la barre d'état, juste avant de basculer entre les vues:
J'ai expérimenté avec d'autres codes de solutions, et je l'aime le mieux, car il fonctionne 100% du temps - certains de mes basé sur le cadre de solutions d'travaillé plus de l'époque - et parce qu'il a un minimum de l'utilisateur des effets visibles.
Je suppose que c'est un bug Apple, et il serait agréable d'entendre le mot officiel sur la meilleure solution de contournement.
[[UIScreen mainScreen] applicationFrame]
. Je pense que cela devrait gérer correctement la barre d'état.S'avère que ce qui se passait parce que je appeler mon modalviewcontroller sur la vue actuelle du contrôleur, mais de mon point de vue, contrôleur avait déjà un autre point de vue contrôleur chargé comme une sous-vue. Une fois que je l'ai changé pour rendre la vue du contrôleur dans la sous-vue, charger le modal, puis il s'en alla. Merci à tous pour votre aide.
Je suis tombé sur le même problème. Pas sûr de ce qui cause cela, mais je l'ai fixée avec la ligne de code suivante juste après je rejette mon modal vue:
Il suffit de régler le décalage en Y pour répondre à vos besoins. Dans un autre exemple, j'ai dû faire 20 au lieu de 10.
Voulais juste carillon et dire que j'ai eu l'exact opposé de problème - un espace blanc à la bas de l'écran. Et le correctif a été l'inverse, j'étais présentation à partir d'un sous-vue, quand j'ai eu besoin de présenter de la part du parent. Merci!
Au cas où quelqu'un regarde ce post (je l'ai fait aujourd'hui et afin que d'autres puissent). Je suis un débutant à l'objective-c, mais et vous pouvez rire à ma suggestion, mais va ici.
Lors de l'exécution de mon application iPad de la barre d'état a toujours été le chevauchement de ma forme. Je n'étais pas heureux d'utiliser la méthode pour changer l'image de coordonnées en bas de 20px donc allé à la recherche.
Trouvé que si je devais faire de mon custom-vue-contrôleur à la fenêtre rootViewController puis la barre d'état de problème de chevauchement s'en alla. Je n'ai pas essayé le modal des trucs dans ce post, mais espérons que cela aide les autres débutants qui demandez peut-être comment seul ce problème.
C'est ce qu'un simple AppDelegate didFinishLaunchingWithOptions méthode ressemblerait à:
OK, je ne sais pas pourquoi cela se produit, il m'est arrivé de bien et de mal de vous dire comment je l'ai corrigé. J'ai trouvé que l'ajout d'une vue à 0,0 fait de chevauchement avec la barre d'état...c'est bizarre parce qu'avant 3.0 je n'ai jamais eu de projets de faire ce comportement 0,0 était toujours en dessous de la barre d'état. De toute façon donc j'ai vu que c'était le chevauchement donc j'ai commencé à mettre mes points de vue à 0,20 ou quelle que soit la taille de la barre d'état. C'était cool jusqu'à ce que j'ai essayé à l'aide d'un modal-vue-contrôleur, lorsqu'elle a rejeté, j'ai trouvé l'espace de la taille de la barre d'état (ce que vous expiriencing), pour une raison quelconque, le modal afficher pense 0,0 NE se chevauchent PAS, la barre d'état, et quand elle écarte 0,20 (de votre vue précédente) montre que si (0,0) n'a pas plus de tour et (0,20) ont l'espace blanc. Pourquoi ce départ qui se passe ? Aucune idée. De toute façon pour le fixer je savais que je devais corriger l'ensemble du chevauchement de la vue et de la barre d'état à 0,0 chose. J'ai continué à essayer mais rien, alors j'ai décidé d'essayer de créer un nouveau point de Vue en fonction du projet dans xcode (qui fixe le point de vue initial pour vous) et de voir si leur point de vue, les chevauchements (ou si ils l'ont mis à 0,20), ce que j'ai trouvé, c'est qu'il n'A PAS de chevauchement et de 0,0 a le droit de placer, juste en dessous de la barre d'état et de ne pas le dépasser. Bizzare? je pense que oui. Donc, ce que j'ai fait sur mon projet était de copier la mise en place qu'ils avaient dans le nouvellement créé vue en fonction du projet (ils ont mis le viewControllers propriété par le biais de l'Interface Builder, vous pouvez créer une vue de projet basée sur, comme je l'ai fait et seulement imiter leur installation), j'ai trouvé que cela corrige le problème, vues à 0,0 à ne plus se chevauchent la barre d'état et de révocation des modal vue contrôleurs ne laisse plus l'écart. Ne sais pas si c'est ton cas, mais ça pourrait l'être, j'espère que cela va vous aider.
J'ai eu exactement le même problème... ma solution? Régler manuellement la hauteur de l'affichage l'affichage modal de 480 px dans interface builder.
Le problème est résolu.
La réponse qui est donnée est difficile à comprendre, plus comme un vague soupçon, il est donc d'essayer d'expliquer plus détaillée:
Le problème est que la vue racine contrôleur qui
viewDidAppear:
méthode est présentée dans la question ressemble à un être simpleUIViewController
. Et comment nous pouvons le voir dans la documentation d'Apple pourwantsFullScreenLayout
:Cette vue de la racine de contrôleur de la présente
UINavigationController
modal, présentés manette de navigation utilise pas la totalité de l'écran. Aussi, il semble que par défautUINavigationController
's de la valeur pourwantsFullScreenLayout
estYES
. C'est pourquoi manette de navigation ajoute l'écart pour éviter underlapping la barre d'état avec la barre de navigation.Il y a donc plusieurs façons de le résoudre:
1) Présente manette de navigation avec
wantsFullScreenLayout
propriété est définie sur NON. (Ou de présenter ~frais UIViewController avec unUINavigationController
's vue comme une sous-vue)2) Modification de la
rootViewController
propriété deUIWindow
à la manette de navigation manuellement, de sorte manette de navigation est présenté sur la totalité de la fenêtre. Pouvez l'utiliser par exemple lorsque le premier écran est une sorte de jetables code pin/mot de passe d'entrée, et on peut facilement tomber après le succès de l'ouverture et de changement pour la manette de navigation.Je suis en cours d'exécution dans la même situation. J'avoue que j'ai peut-être pris une orientation de l'itinéraire, l'incorporation d'une barre d'onglet dans un NavController, et maintenant je suis un peu de voir pourquoi ils disent de ne pas le faire. Eh bien, peu importe, il fait sens pour mon application, même si c'est une douleur totale à mettre en œuvre.
Mon problème est que une fois que j'ai poussé un Modal VC sur un TabController sous-vue (qui est, à son tour, une sous-vue de la global NavController point de Vue, qui a le contrôle de la barre de navigation en haut... qui se transforme en une délégation cauchemar) et puis rejeter le MVC, le point de vue qui revient est poussé vers le haut sous la barre de navigation. Ne se produit pas lorsque j'ajoute ou appuyez sur n'importe quel autre sous-vues, juste avec les accidents de la route.
[self.vue setFrame:(CGRect)] ne semble pas faire l'affaire, si je l'appelle tout de suite après l' [auto dismissModal...]. Cependant, il doit être appelé sur tous les sous-vues de mon tab bar controller, ou même les autres listes sont mis en place sous la barre. Poopy.
Rend les choses un mal de tête, mais pas insoluble. Mais je suis d'accord, c'est un nouveau bug avec les 3.x (ou c'est peut-être l'un de ceux à double tranchant "les nouvelles fonctionnalités"), et c'est carrément ennuyeux. Je suis le téléchargement 3.1.2 SDK maintenant, et nous espérons qu'il porte sur cette question. Va mon commentaire [setFrame] les lignes et voir ce qui se passe. Mais j'espère que, si elle n'est pas résolu dans cette version, il le sera prochainement. Jusqu'alors, il semble que la solution est beaucoup de (certes hackerish et répétitives) du code.
EDIT: Non, la mise à jour n'a pas aidé. Merde. De retour pour le code je vais, dur de définir la position de chaque écran. Génial. J'espère que la taille de l'anr et de l'Onglet Barres de ne jamais changer.
EDIT 2: Hey! J'ai trouvé! (i R prowd.) Semble que le problème est que, quand mon MVC a été rejetée, ma vue s'est passé avant à la barre d'onglet contrôleur, qui avait "oublié" il avait une barre de navigation au-dessus d'elle. Ne me dites pas comment, je suis probablement le moyen de sortir de documentés territoire par maintenant. Mais, j'ai résolu mon problème en simplement redéfinir le [sous-vue.vue setFrame:0,0,largeur, hauteur] après le retour de l'édition. Pas sûr de savoir pourquoi cela fait tout différence, mais dans l'application qu'il fait, parce que, ne l'est plus de la première, et un demi-lignes de mon tableau vue de se faufiler sous la barre de navigation. Donc, je n'ai pas vraiment de conseils, il suffit de trouver le bon endroit pour mettre
[(appropriateViewController).view setFrame:CGRectMake(0,0,self.view.frame.size.width, self.view.frame.size.height];
Ne sais pas pourquoi cela fonctionne, mais il n'. N'est-ce pas le pire genre d'erreur?
J'ai utilisé @Mark Hammonds réponse, mais il suffit de réinitialiser le cadre de l'offset à 0, c'est à dire:
Comme vous pouvez le deviner, c'était tout en essayant de rejeter une boîte de dialogue modale présenté sur le dessus d'un dédoublement de la vue sur une application pour iPad.
Je l'ai fait essayer @Tyler réponse, et il n'a pas de travail pour moi.
Ce sur iOS4.1, le ciblage de l'iPad 3.2.
Que j'ai pu croiser à quelques reprises et n'a la solution de contournement (re-réglage de l'image) en raison de la pression du temps, mais la dernière fois que j'ai couru vers elle, j'ai trouvé une vraie solution. Au lieu de créer votre haut niveau-vue-contrôleur dans le code (si il l'est), essayer de l'avoir à l'être créé dans le UIWindow et IBOutlet à l'AppDelegate à la place.
A fonctionné pour moi.
Je trouve que à la fois la présentation et la révocation de l'modal vue contrôleurs de cause, surtout quand vous voulez faire la coutume layouting dans
-viewDidLoad
(dont certains disent que vous ne devriez pas vous, mais je n'ai jamais trouvé mieux, façon de travailler). Ce que je fais, c'est:Maintenant, vous pouvez vous présenter en tant que tel:
sans risquer viewController1 être disposées dans une faute de moyen jusqu'à ce que la transition de fait, l'adhérence à l'endroit où il devrait être. La même chose s'applique à la rejetant. Fonctionne pour moi sur iOS 3.0 si 5.0, iPhone et iPad.
J'ai trouvé plus "élégant" manière de faire. Si vous ajoutez une vue de dessus de votre fenêtre, ce qui est de la même taille que la fenêtre et ajouter des sous-vues à cette vue d'en haut au lieu de la fenêtre, tous les sous-vues seront compensés par 20 pixels dans la bonne direction, barre d'état, visible, aucun écart n'importe où et même la rotation fonctionne correctement. Je l'ai testé avec l'iPad et l'iPhone 4.3 et 5.0... Quel est le piège? 😉
Vous pourrait probablement ce code lorsque vous fermez le UIImagePickerController.
Pour moi, mon modal-vue-contrôleur est un MoviePlayer et quand il serait présenté, il semble que la barre d'état sera redessiné. Lorsque l'avis a été rejeté, ce deuxième barre d'état serait en quelque sorte créer un 20px décalage en bas de mon écran, juste au-dessus de la tabbar contrôleur.
Pour résoudre ce problème, lorsque le modèle-vue-contrôleur a été présenté, je voudrais masquer la barre d'état. Quand le film a fini de jouer et le modèle-vue-contrôleur allait être rejeté, j'ai fait la barre d'état visible.
code
-(void)viewWillAppear:(BOOL)animé{ [[[auto navigationController]navigationBar]addSubview:auto.navBarView]; }code
J'ai eu le même problème et voici ma solution. Juste ajouter ceci à votre AdDelegate:
C'est très simple; lors de la diffusion de l'annonce, je me cache dans la barre d'état et lorsque l'annonce disparaît je l'afficher de nouveau. J'espère que la réponse aide certaines personnes.