2010-09-27 2 views
2

J'utilise le dernier Xcode et j'ai créé une application universelle basée sur la vue et j'ai commencé à construire en me concentrant sur l'iPhone et maintenant il est obligatoire pour moi de le mettre en iPad. Je n'ai pas utilisé le constructeur Interface dans le développement car des changements d'écran plus dynamiques étaient attendus depuis le début. Dans le code j'ai mis tous les écrans avec CGRECTMake (0,0,320,480).Aide requise pour convertir l'application iPhone en iPad

Maintenant, quand j'ai essayé de lancer l'application dans un simulateur iPad, l'application colle aux coins supérieurs du simulateur avec une largeur de 320 et une hauteur de 480 et le reste de l'écran semble blanc au lieu de venir dans le milieu de l'écran avec une bordure et 2x options.

J'ai fait la propriété Nom de base du fichier nib (iPad) propriété dans le fichier .plist à mon nom XIB iPhone. Je sais que c'est l'une des principales raisons pour lesquelles l'application reste en haut, mais comment rendre ce générique et rendre mon application correcte dans l'iPad?

aider Veuillez

Répondre

3

Si vous créez votre point de vue programatically vous devez définir tout ce qui a une taille deux fois, une fois pour iPhone/iPod et une fois pour iPad. Vous pouvez faire quelque chose comme:

if ([Utils isIPad]) { 
    rect = CGRectMake(0,0,640,1024); 
} 
else { 
    rect = CGRectMake(0,0,320,480);  
} 

[Utils isIPad] serait quelque chose comme:

+ (BOOL)isIPad { 
#ifdef UI_USER_INTERFACE_IDIOM 
    return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad); 
#else 
    return NO; 
#endif 
} 

Faire cela avec grué est plus facile et plus rapide, cependant. Vous devez juste utiliser la bonne plume dans ce cas. Quelque chose comme:

if ([Utils isIPad]) { 
    login = [[LoginController alloc] initWithNibName:@"LoginController-iPad" bundle:nil];    
} 
else { 
    login = [[LoginController alloc] initWithNibName:@"LoginController" bundle:nil]; 
} 
+0

Merci beaucoup .. mise en œuvre de ce fait me faire changer les positions des icônes, UILabels, UItextviews etc dans le code et ses dimensions i Ne pas avoir le XIB mis en œuvre. Tout est dynamique seulement, aide aimablement. – Futur

2

En réponse à la réponse de dkk, ne serait-il plus commode d'utiliser le cadre de l'application de l'écran principal? Cela renvoie la taille d'image correcte en fonction de l'appareil sans contrôles manuels ou tailles d'écran codées en dur.

[UIScreen mainScreen] applicationFrame] 

Plus d'info: UIScreen Class Reference, reportez-vous à la propriété applicationFrame

+0

Merci. Je voudrais ajouter le même commentaire s'il vous plaît aider .. effectivement l'exécution cela me fera changer les positions des icônes, UILabels, UItextviews etc. dans le code et ses dimensions car je n'ai pas mis en application le XIB. Tout est dynamique seulement, donc je ne suis pas seulement préoccupé par l'écran seul mais aussi les éléments à l'intérieur. – Futur

+1

Si vous utilisez la même vue pour l'iPhone et l'iPad, vous pouvez vous en sortir en définissant le masque autoresizing approprié de vos étiquettes, textviews ... sinon vous devrez écrire du code qui repositionne tout et un dernier recours serait d'utiliser 2 différents points de vue. –

+1

Je préfère utiliser la méthode isIPad car vous seriez tenté d'utiliser des pourcentages de l'image pour positionner des éléments. Et cela pourrait causer des bogues car en l'utilisant en mode paysage, la variable applicationFrame retournera parfois la taille du portrait. – Daniel