Question Comment développer ou migrer des applications pour la résolution d'écran de l'iPhone 5?


Le nouvel écran de l'iPhone 5 a un nouveau format et une nouvelle résolution (640 x 1136 pixels).

Qu'est-ce qui est nécessaire pour développer de nouvelles applications ou des applications de transition déjà existantes vers la nouvelle taille d'écran?

Que devrions-nous garder à l'esprit pour rendre les applications "universelles" à la fois pour les anciens écrans et le nouveau format d'image grand écran?


485
2017-09-12 19:44


origine


Réponses:


  1. Téléchargez et installez la dernière version de Xcode.
  2. Définissez un fichier d'écran de lancement pour votre application (dans l'onglet général de vos paramètres cibles). C'est ainsi que vous pouvez utiliser la taille de tout écran, y compris les tailles de vue divisées iPad dans iOS 9.
  3. Testez votre application et, espérons-le, ne faites rien d'autre, car tout devrait fonctionner comme par magie si vous aviez réglé correctement les masques de redimensionnement automatique ou utilisé la mise en page automatique.
  4. Si vous ne l'avez pas fait, ajustez vos dispositions d'affichage, de préférence avec la mise en page automatique.
  5. S'il y a quelque chose que vous devez faire pour les grands écrans, alors il semble que vous devez vérifier la hauteur de [[UIScreen mainScreen] bounds] car il semble n'y avoir aucune API spécifique pour cela. Depuis iOS 8, il existe également des classes de taille qui permettent d'obtenir des tailles d'écran abstraites ou verticales ou compactes, verticalement et horizontalement, et qui sont recommandées pour adapter votre interface utilisateur.

476
2017-09-12 23:13



Si vous avez créé une application pour iPhone 4S ou antérieure, elle fonctionnera en mode letterbox sur iPhone 5.

Pour adapter votre application au nouvel écran, la première chose à faire est de changer l'image de lancement en: Default-568h@2x.png. Sa taille devrait être 1136x640 (HxW). Ouais, avoir l'image par défaut dans la nouvelle taille de l'écran est la clé pour laisser votre application prendre la totalité de l'écran du nouvel iPhone 5.

(Notez que la convention de nommage ne fonctionne que pour l'image par défaut.Nommer une autre image "Image-568h@2x.png" ne la fera pas charger à la place de "Image@2x.png" Si vous avez besoin de charger différentes images pour différentes tailles d'écran, vous devrez le faire par programmation.)

Si vous êtes très très chanceux, ça pourrait être ça, mais selon toute vraisemblance, vous devrez faire quelques pas supplémentaires.

  • Assurez-vous que vos Xibs / Vues utilisent la mise en page automatique pour se redimensionner.
  • Utilisez des ressorts et des entretoises pour redimensionner les vues.
  • Si cela ne suffit pas pour votre application, concevez votre xib / storyboard pour une taille d'écran spécifique et repositionner par programmation pour le autre.

Dans le cas extrême (lorsque rien de ce qui précède ne suffit), concevez les deux Xib et chargez celui qui convient dans le contrôleur de vue.

Pour détecter la taille de l'écran:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

116
2017-09-19 20:27



La seule chose vraiment nécessaire à faire est d'ajouter une image de lancement nommée "Default-568h@2x.png" aux ressources de l'application, et dans le cas général (si vous êtes assez chanceux) l'application fonctionnera correctement.

Dans le cas où l'application ne gère pas les événements tactiles, assurez-vous que la fenêtre de la clé a la bonne taille. La solution de contournement consiste à définir le cadre approprié:

[window setFrame:[[UIScreen mainScreen] bounds]]

Il existe d'autres problèmes non liés à la taille de l'écran lors de la migration vers iOS 6. Lire Notes de mise à jour iOS 6.0 pour plus de détails.


29
2017-09-16 04:12



Parfois (pour les applications pré-storyboard), si la mise en page doit être suffisamment différente, il vaut la peine de spécifier un autre xib en fonction de l'appareil (voir cette question - vous aurez besoin de modifier le code pour gérer l'iPhone 5) dans le viewController init, car il n'y aura pas de manipulation de masques autoréglables si vous avez besoin de graphiques différents.

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    NSString *myNibName;
    if ([MyDeviceInfoUtility isiPhone5]) myNibName = @"MyNibIP5";
    else myNibName = @"MyNib";

    if ((self = [super initWithNibName:myNibName bundle:nibBundleOrNil])) {


...

Ceci est utile pour les applications qui ciblent les anciennes versions d'iOS.


23
2017-10-11 08:56



Ici vous pouvez trouver un bon tutoriel (pour MonoTouch, mais vous pouvez aussi utiliser les informations pour les projets non MonoTouch):
http://redth.info/get-your-monotouch-apps-ready-for-iphone-5-ios-6-today/

  1. Créez une nouvelle image pour votre écran splash / default (640 x 1136 pixels) avec le nom "Default-568h@2x.png"

  2. dans le Simulateur iOS, allez dans le menu Hardware -> Device, et sélectionnez "iPhone (Retina 4 pouces)"

  3. Créer d'autres images, par ex. images de fond

  4. Détectez l'iPhone 5 pour charger vos nouvelles images:

public static bool IsTall
{
    get {
        return UIDevice.currentDevice.userInterfaceIdiom
                    == UIUserInterfaceIdiomPhone
                && UIScreen.mainScreen.bounds.size.height
                    * UIScreen.mainScreen.scale >= 1136;
    }
}

private static string tallMagic = "-568h@2x";
public static UIImage FromBundle16x9(string path)
{
    //adopt the -568h@2x naming convention
    if(IsTall())
    {
        var imagePath = Path.GetDirectoryName(path.ToString());
        var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
        var imageExt = Path.GetExtension(path.ToString());
        imageFile = imageFile + tallMagic + imageExt;
        return UIImage.FromFile(Path.Combine(imagePath,imageFile));
    }
    else
    {
        return UIImage.FromBundle(path.ToString());
    }
}

20
2017-09-17 13:55



C'est facile pour migrer iPhone5 et iPhone4 à travers XIBs .........

UIViewController *viewController3;
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
    UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone5screen" bundle:nil] autorelease];               
}    
else
{
     UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone4screen" bundle:nil] autorelease];
}

13
2017-12-21 07:52



Je résous ce problème ici. Ajoutez simplement le suffixe ~ 568h @ 2x aux images et ~ 568h aux xib. Aucun besoin de plus de vérifications d'exécution ou de modifications de code.


12
2017-11-27 08:02



J'avais ajouté la nouvelle image de lancement par défaut et (en vérifiant plusieurs autres réponses SE ...) fait en sorte que mes storyboards tous auto-dimensionnés eux-mêmes et sous-vues, mais la rétine 4 pouces encore letterboxed.

Ensuite, j'ai remarqué que mon info plist avait un élément de campagne pour "Lancer l'image" réglé sur "Default.png", que j'ai donc supprimé et que par magie le letterboxing n'est plus apparu. Espérons que cela sauve quelqu'un d'autre la même folie que j'ai endurée.


10
2017-10-26 16:50



Je suppose que cela ne fonctionnera pas dans tous les cas, mais dans mon projet particulier, cela m'a évité la duplication des fichiers NIB:

Quelque part dans common.h vous pouvez définir ces définitions en fonction de la hauteur de l'écran:

#define HEIGHT_IPHONE_5 568
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5)

Dans votre contrôleur de base:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (IS_IPHONE_5) {
        CGRect r = self.view.frame;
        r.size.height = HEIGHT_IPHONE_5 - 20;
        self.view.frame = r;
    }
    // now the view is stretched properly and not pushed to the bottom
    // it is pushed to the top instead...

    // other code goes here...
}

9
2018-03-26 07:06



Dans un constants.h fichier, vous pouvez ajouter ces instructions de définition:

 #define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 
 #define IS_IPHONE UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
 #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 
 #define IS_IPHONE_5 (!IS_IPAD && IS_WIDESCREEN)

9
2018-01-29 08:11



Pour déterminer si votre application peut prendre en charge l'iPhone 5 Retina, utilisez ceci: (Cela pourrait être plus robuste pour retourner le type d'affichage, 4S Retina, etc., mais comme il est écrit ci-dessous, il revient juste si l'iPhone prend en charge iOS5 Retina comme un OUI ou NON)

Dans un fichier ".h" commun, ajoutez:

BOOL IS_IPHONE5_RETINA(void);

Dans un fichier ".m" commun, ajoutez:

BOOL IS_IPHONE5_RETINA(void) {
    BOOL isiPhone5Retina = NO;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        if ([UIScreen mainScreen].scale == 2.0f) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960){
                //NSLog(@"iPhone 4, 4s Retina Resolution");
            }
            if(result.height == 1136){
                //NSLog(@"iPhone 5 Resolution");
                isiPhone5Retina = YES;
            }
        } else {
            //NSLog(@"iPhone Standard Resolution");
        }
    }
    return isiPhone5Retina;
}

9
2017-10-28 21:55