Offset sur UIWindow addSubview
J'ai un UITabBar en fonction de l'application qui fonctionne très bien. Dans certaines circonstances, je suis en train de montrer un autre UIViewController plutôt bien. Maintenant ce qui me dérange, c'est que j'ai à régler l'image pour l'Essai de plume (et seulement le Test de plume!) pour afficher correctement. (Sinon la vue est en dessous de la barre d'état).
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
if (condition) {
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"Test" bundle:nil];
//FIXME this should NOT be required
CGRect r = vc.view.frame;
r.origin.y += 20;
vc.view.frame = r;
[window addSubview:vc.view];
[window makeKeyAndVisible];
return;
}
[window addSubview:tabViewController.view];
[window makeKeyAndVisible];
}
Alors peut-être que quelque chose est incorrect avec le Test de la plume? Ne peut pas être. Le Test de plume fonctionne comme souhaité dans un endroit propre nouveau projet. Et une nouvelle plume présente les mêmes symptômes. Donc, quelque chose doit être mal à l'MainWindow plume, droit? Mais le UITabBarController affiche très bien.
Je suis un peu confus et à court d'idées ici. Des suggestions pour le suivi de cette panne?
Vous devez vous connecter pour publier un commentaire.
L'ajout de la vue racine de votre UIWindow peut être compliqué depuis la fenêtre toujours underlaps la barre d'état. Le cadre de la racine de votre point de vue doit donc être remis à
[[UIScreen mainScreen] applicationFrame]
pour l'empêcher de underlapping la barre d'état ainsi. Normalement, nous n'avez pas à vous inquiéter à ce sujet parce que UIViewController modifie l'image pour nous... sauf quand ça ne marche pas. Voici l'affaire:et de son point de vue dans la même PLUME, et vous
nest la vue de dessous de la vue
contrôleur, il sera ajuster l'affichage de l'image automatiquement.
son point de vue dans la même PLUME, mais vous
connectez le point de vue de la vue
contrôleur par l'intermédiaire du contrôleur
vue prise plutôt que de nidification, le contrôleur ne ajuster l'affichage de l'image automatiquement.
Je suppose que Apple a pensé qu'-initWithNibName:bundle: ne serait généralement pas être utilisées pour créer la fenêtre de vue de la racine, afin de ne pas ajuster l'image dans votre cas. Redimensionner manuellement comme vous l'avez fait est très bien, et est en fait recommandé dans le - Vue-Contrôleur Guide de Programmation pour iPhone OS, mais vous devriez vraiment utiliser
[[UIScreen mainScreen] applicationFrame]
depuis la barre d'état n'est pas toujours 20 pixels de hauteur (par exemple, il est plus grand lorsque vous êtes sur un appel téléphonique.)C'est beaucoup plus simple et qui fonctionne aussi (iOS 4.0 et versions ultérieures)
-setRootViewController ajoute automatiquement le point de vue du contrôleur de la fenêtre de sorte que vous n'avez pas besoin de s'inquiéter à ce sujet. La propriété est (nonatomic, retain) afin de le libérer après l'affectation à la fenêtre efficacement les mains sur la propriété de l'objet de la UIWindow et sera publié (et, par conséquent, désalloué) lorsque la fenêtre est libéré. Vous pouvez bien sûr créer une variable d'instance et de conserver une référence à elle et la libération en -dealloc si vous voulez faire des trucs avec elle dans l'autre délégué d'application des méthodes. Je préfère la méthode ci-dessus comme il prend soin de nettoyage automatiquement.
Dans le cas où vous ne savez pas, vous pouvez également publier des avis des contrôleurs immédiatement après l'ajout de leur point de vue à tout autre point de vue comme une sous-vue, soit de présenter un modal vue des contrôleurs de vue. Chaque fois qu'une vue est supprimé ou sauté hors de la vue de la pile de leurs correspondants des contrôleurs sera publié ainsi.
Vous n'avez pas besoin d'utiliser initWithNibName, juste ...alloc] init]; fera.
Je suis en supposant que votre
UITabBarController
est un IB de sortie, de sorte que lorsqueapplicationDidFinishLaunching:
est appelé, il est déjà initialisé. Essayez ce qui suit: juste après l'instanciation de votre vue-contrôleur, n':Juste à la deuxième, ce qui a été dit ci-dessus: Voici le code que j'ai eu à utiliser: