La hauteur et la largeur de l'iPhone (ou iPad)
C'est juste une application de test, Il y a seulement un AppDelegate classe pour créer tout ce que je fait a été de créer une Fenêtre d'application basée sur les, de définir les orientations prises en charge uniquement le paysage de l'info.plist, et puis ajoutez le code suivant:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
//Override point for customization after application launch.
UIAlertView *test = [[UIAlertView alloc] initWithTitle:@"hu" message:@"hui" delegate:nil cancelButtonTitle:@"hi" otherButtonTitles:nil];
[test show];
[window makeKeyAndVisible];
NSLog(@"win %f - %f", window.bounds.size.width, window.bounds.size.height);
return YES;
}
Sans la première ligne, qui fixe la barre d'état de l'orientation, de l'alerte s'affiche en mode portrait, même si le reste de l'interface est en mode paysage gauche.
De toute façon le Journal donne encore ceci:
win 768.000000 - 1024.000000
C'est dans le mauvais sens (et donc quand j'ai ajouter des sous-vues dans ma vraie application les frames ne sont pas corrects)
Apple semble avoir vraiment couché sur l'interface de rotation, parce que je n'ai rien eu, mais des problèmes, je ne me souviens pas de tout ce qui se passe sur l'iPhone, donc svp quelqu'un peut me dire comment résoudre ce problème.
Je vais vous donner 500 réputation (c'est tout mais 10 de ma réputation) à la personne qui peut au moins expliquer pourquoi cela se produit et nous espérons apporter une solution.
Pourquoi tu fais ça dans l'AppDelegate? Pour contourner ce problème j'ai créer un BOOL dans l'AppDelegate qui est Faux jusqu'à ce que cette méthode est appelée lorsqu'il se transforme en VRAI. Puis, dans la viewWillLoad dans mon MainVC je démarrer une minuterie qui vérifie si l'AppDelegate BOOLÉEN est VRAI. Si c'est moi le feu de la méthode qui montre l'alerte. Pour le rendre plus agréable je montre aussi l'image par Défaut sur mon MainVC jusqu'à ce que le message s'affiche. Cela peut sembler un hacky approche, mais je n'ai pas toujours pour montrer l'affichage alerte donc je check aussi.
OriginalL'auteur Jonathan. | 2010-10-19
Vous devez vous connecter pour publier un commentaire.
Je pense que le "Le lancement en Mode Paysage" de la Application iOS Guide de Programmation explique en grande partie ce qui se passe avec votre application de test:
En termes de votre application de test, l'élément clé est la dernière section. Vous n'avez pas de-vue-contrôleur, de sorte que vous êtes entièrement responsable de la configuration de l'INTERFACE utilisateur dans l'orientation que vous voulez. C'est pourquoi vous devez définir la barre d'état de l'orientation manuellement.
J'ai lu le premier paragraphe en disant que les applications iOS sont toujours en mode portrait et la vue racine contrôleur tourne son point de vue pour correspondre à l'orientation du périphérique immédiatement et sans animation une fois qu'il est ajouté à la fenêtre. Cela signifie que le UIWindow lui-même ne tourne pas donc ses dimensions sera toujours dans les conditions d'une orientation portrait (comme tadej5553 a dit). En outre, les cadres de tous les UIWindow des sous-vues seront également en termes d'une orientation portrait (puisque le cadre est toujours défini dans la vue parent de coordonnées). Donc, peu importe la façon dont vous faites pivoter l'appareil, la vue de la racine du contrôleur image sera toujours dans les conditions d'une orientation portrait. Cependant, depuis une vue de limites de propriété est définie en termes de ses propres coordonnées, que la hauteur et la largeur doivent refléter l'orientation actuelle de la vue.
Il n'est pas clair ce que vous voulez accomplir avec votre application réelle, mais la pratique recommandée consiste à exposer votre point de vue de l'orientation portrait et ensuite leur d'un redimensionnement automatique des propriétés de gérer la rotation automatique (si elle se produit immédiatement après l'application de lancement ou plus tard).
L'iPad est une exception à la règle parce que c'est la maison de l'écran peut pivoter en mode paysage.
OriginalL'auteur Tim Isganitis
UIWindow ne sait rien à propos de la rotation. Les méthodes de la Rotation sont encapsulés dans UIViewController. (auto rotations etc)
UIAlertView utilise UIApplication de statusBarOrientation propriété de choisir d'alerte de l'orientation.
Comme vous pouvez le voir à partir des en-têtes SDK, statusBarOrientation ne change pas automatiquement. Donc, soit vous ou UIViewController (rotation automatique) devrait modifier cette propriété.
Si vous démarrez en mode portrait (ce qui est cohérent avec UIWindow de l'orientation par défaut), et l'utilisation shouldAutorotateToInterfaceOrientation et laissez UIViewController à la rotation de la poignée, il change UIApplication de statusBarOrientation sur chaque dispositif de changement d'orientation.
Mais Si vous démarrez en mode paysage, vous devez définir manuellement statusBarOrientation pour une fois.
Espère que cette aide.
J'ai passé tellement de temps à essayer de résoudre ce avant de trouver cette solution. Mettre [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight d'animation:N]; la première ligne de mon loadView a fait le travail. Merci!
Je pense que je viens de perdre 2h à essayer d'obtenir mon iPad (iOS5) pour démarrer en mode paysage uniquement. Cela fonctionne, merci beaucoup.
OriginalL'auteur Deniz Mert Edincik
Utiliser les limites de la vue
OriginalL'auteur tadejsv
Fenêtre donnera toujours la taille pour l'orientation portrait. Toujours.
Mais les points de vue, il va donner les mesures correctes (concernant l'orientation), alors assurez-vous d'utiliser ceux-ci.
La largeur est toujours comme 768 en mode paysage (la hauteur de l'écran en mode paysage est de 1024) et vice-versa, dans portrait
utiliser les limites, non pas l'image de la vue pour obtenir les coordonnées correctes
OriginalL'auteur tadejsv
Au lieu de saisir manuellement jouer avec la barre d'état, essayez de définir
UISupportedInterfaceOrientations
àUIInterfaceOrientationLandscapeLeft
dans votre info.fichier plist. Ensuite, l'application doit être prêt à aller quand vous le lancez.Réglage manuel de la barre d'état de l'orientation est une sorte de "bas niveau". Votre point de vue, les contrôleurs doivent retourner
UIInterfaceOrientationLandscapeLeft
dans leshouldAutorotateToInterfaceOrientation
méthode d'instance.bah désolé
Pourquoi n'avez-vous pas de tout UIViews? Vous êtes toujours censé avoir un conteneur UIView à l'intérieur de votre fenêtre pour autant que je sais. Vous n'êtes pas placer le widget de points de vue directement à l'intérieur de la fenêtre ou de quelque chose êtes-vous?
Bien que dans ma vraie application (celui dont je parle dans cette question est le jus d'essayer de le faire fonctionner)j'ai un sous-classé UIViewController, et lorsque j'ajoute que c'est dans la vue de Délégué d'Application à l'aide de la fenêtre.cadre que le point de vue de l'image, il ajoute de la vue avec les dimensions de la mode portrait (de sorte que le bas de la vue est à couper et il y a un écart à droite)
Il refuse juste de la fenêtre.taille de l'image le bon sens, il doit transposer la largeur et la hauteur lorsque l'interface tourne mais parce que les fenêtres de cadre.la taille est incorrect, il signifie la sous-vue de l'image.la taille est faux et est donc le sous-vue de les sous-vues.
OriginalL'auteur Nimrod
Voici ce que j'ai fait pour obtenir que cela fonctionne:
Ajouter un peu de code pour votre délégué d'application:
Je pense que la clé est le point de vue, je l'ai essayé sans et sur iPhone, il a très bien fonctionné, sur l'iPad, mais l'alerte a montré en mode portrait comme vous le dites. Quand j'ai ajouté l'affichage de l'alerte affichée en mode paysage comme souhaité.
OriginalL'auteur ImHuntingWabbits
J'ai rien eu, mais des problèmes de coder en dur mon Application en mode Paysage mode. Beaucoup de temps, il n'y avait pas de problème visuel, mais les boutons en bas de 20 pixels n'ont pas pu être sélectionné. J'ai fait un clipToBounds sur mon principal UIWindow et a ajouté une bordure sur sa couche et j'ai pu voir que la UIWindow était sous la barre d'état. J'ai essayé de changer ma position en x de mon UIWindow à 20 (UIWindow est encore dans le Portrait, son contenu est Paysage), mais cela signifiait mon UIControllers ont été décalée vers le bas par 20 pixels (je ne sais Pas pourquoi). Même si c'est un problème différent de la vôtre, j'ai également constaté le même problème que vous avez en ce que les limites et les images lors de l'impression sont corrects.
De toute façon pour couper une longue histoire courte, j'ai changé mon plist de UIInterfaceOrientationLandscapeLeft à UIInterfaceOrientationLandscapeRight et a également changé mon UIViewController méthode:
Et tous mes problèmes ont disparu. Plusieurs fois, j'ai juré qu'il y a des bugs dans les Pommes de rotation de code qui s'avèrent être la façon dont je l'ai mis en place quelque chose, mais je pense que celui-ci est définitivement une Pomme.
Laissez-moi savoir si cela résout votre problème
OriginalL'auteur Brett