11 votes

Comment rendre un uitableview dans interface builder compatible avec un iPhone 4 pouces

Comment rendre une vue utilitaire dans interface builder compatible avec l'iphone5 4 pouces, et l'ancien iPhone 4/4s ?

Il existe trois options dans Xcode 4.5 :

  • Freeform
  • Retina 3.5 plein écran
  • Retina 4 plein écran

Si j'ai choisi Retina 4, alors dans le téléphone de 3,5 pouces, il traverse ou dépasse le bord de l'écran.

En utilisant le code, je peux définir le cadre en conséquence, mais alors quelle est l'utilité d'utiliser le constructeur d'interface ?

Comment faire en utilisant Interface Builder ?

EDIT

Ma question concerne l'écran 4 pouces de l'iphone 5 retina. En inspectant la taille de la vue qui a une barre d'état et une barre de navigation, voici la valeur de self.view.frame.size.height/width, frame 320.000000 x 416.000000 dans le cas où je choisis freeform/none/retina 3.5

Les options de redimensionnement automatique sont définies de manière à ce que la vue s'étende dans toutes les directions, c'est-à-dire que tous les supports et ressorts sont activés.

EDIT Pour le test dans le simulateur iOS6, si je place ce qui suit dans le code

self.tableView.frame    = CGRectMake(0, 0, 320, 546);
self.tableView.bounds   = CGRectMake(0, 0, 320, 546);
self.view.frame         = CGRectMake(0, 0, 320, 546);
self.view.bounds        = CGRectMake(0, 0, 320, 546);
NSLog(@"%2f - %2f", self.view.bounds.size.width, self.view.bounds.size.height);
NSLog(@"%2f - %2f", self.tableView.bounds.size.width, self.tableView.bounds.size.height);

J'obtiens le résultat suivant

 320.000000 - 546.000000
 320.000000 - 546.000000

Toutes les lignes situées en dessous de 480 px du haut ne sont pas sélectionnables, car la "vue" pense toujours qu'elles sont hors limites.

MA SOLUTION

Définissez la taille sur Retina 4 pour tous les écrans, même le fichier xib de la fenêtre principale. Cela semble fonctionner correctement même sur l'iphone 4 après cela. Et toutes les lignes inférieures à 480px sont maintenant cliquables dans le simulateur iOS 6.

18voto

M. Alvanez Points 181

PRUDENCE de définir l'attribut de taille sur "Retina 4 Full Screen" si vous présentez des feuilles d'action dans votre application. Cette solution règle en fait les dimensions de la fenêtre principale sur les dimensions de l'iPhone 5. Dans mon cas, ce réglage a affecté l'affichage dans l'iPhone 4 lorsque vous essayez de montrer une feuille d'action parce qu'il va essayer de la montrer en dessous de l'écran visible.

La bonne solution qui fonctionne dans tous les cas est de définir la taille à none et de détecter la taille de l'écran dans la méthode didfinishloading du délégué de l'application et de définir la fenêtre principale à cette taille ou de définir la vue du rootviewcontroller à cette taille. Les feuilles d'actions fonctionneront correctement.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window.frame = CGRectMake(0, 0, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height);

}

11voto

fannheyward Points 5080

Choisissez votre fichier xib et modifiez l'élément Size attribut.

enter image description here

3voto

WaaleedKhan Points 685

D'après ce que j'ai compris, vous voulez créer une vue de table qui peut être applicable à l'iPhone 4 et 5. Tout d'abord, je n'ai pas encore essayé le Xcode 4.5, mais le code est le suivant

 CGRect fullScreenRect = [[UIScreen mainScreen] bounds];
 theTableView.frame = CGRectmake = (0,0,fullScreenRect.width,fullScreenRect.height);

le site fullScreenRect renvoie la limite du périphérique actuel, qu'il s'agisse d'un 3,5 ou d'un 5 pouces, et vous pouvez définir la hauteur et la largeur de manière dynamique.

Faites-moi savoir si ça a marché..

Cheers

W

3voto

AliSoftware Points 21493

Les paramètres tels que le choix de "freeform", "Retina 3.5" ou "Retina 4" dans Interface Builder se trouvent dans l'onglet ". Simulé la section "métriques" du panneau de droite (c'est nous qui soulignons) .

Cela signifie qu'ils ne sont utilisés que pour vous montrer comment la vue se présentera lorsqu'elle sera affichée à ces dimensions. En général, vous utilisez cette fonction pour savoir, au moment de la conception, de quel espace vous disposerez pour disposer vos vues. Mais l'UIView d'un UIViewController est toujours redimensionnée lorsqu'elle est affichée à l'écran à la fin.

Par exemple, si vous savez que vous aurez une barre d'état et une barre de navigation en haut, ainsi qu'une barre d'onglets en bas, vous aurez moins d'espace pour organiser le reste de votre vue à l'écran. Le fait de sélectionner ces éléments dans la section "Mesures simulées" du panneau vous aidera à voir l'espace dont vous disposez dans la vue et à éviter de placer des éléments à y=460, par exemple, qui sortiront de l'écran au moment de l'exécution en raison de ces barres de navigation et d'onglets.

Mais à la fin, le UIViewController redimensionnera sa vue de manière à occuper le maximum d'espace disponible, en déplaçant les sous-vues en fonction des propriétés AutoresizingMask (les struts & springs que vous pouvez configurer dans le volet Size Inspector de IB).

En conclusion, la seule chose que vous devez faire est :

  • Préférez choisir la métrique simulée "Retina 3.5" pour votre vue afin de voir dans Interface Builder la plus petite taille que vous pouvez avoir lorsque cette vue est affichée (vous éviterez ainsi de placer des vues et des contrôles dans une partie de votre écran qui ne sera visible que sur des écrans 4" mais pas sur des écrans 3.5" et concevrez votre vue en gardant à l'esprit la plus petite zone commune)
  • Configurez correctement vos masques de redimensionnement automatique (ou utilisez AutoLayout et les contraintes si vous prévoyez de sortir votre application pour iOS6 uniquement et non pour iOS4 ou iOS5) afin que vos vues soient réorganisées correctement lorsque l'écran est plus haut (Retina 4").

0voto

Frank Wu Points 51

Si votre interface utilise Storyboard :

Ouvrez *.Storyboard avec "éditeur de texte".

et aller au bout du fond trouver <simulatedScreenMetrics key="destination" type="retina4"/>

supprimer type="retina4"

alors la taille par défaut sera de 3,5".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X