322 votes

La largeur maximale préférée automatique de la mise en page n'est pas disponible sur les versions d'iOS antérieures à 8.0.

J'ai ouvert un projet iOS existant avec Xcode6 beta6, et Xcode affiche l'avertissement suivant pour les fichiers Storyboard et Xib :

La largeur maximale préférée automatique de la mise en page n'est pas disponible sur les versions iOS antérieures à 8.0

J'ai essayé de répondre à l'avertissement en définissant la largeur comme explicite comme ci-dessous :

Pourtant, cela n'a pas résolu les avertissements. Comment les supprimer ?

373voto

Michael G. Emmons Points 16681

Mise à jour 3 :
Cet avertissement peut aussi être déclenché par des étiquettes qui ont numberOfLines n'a pas la valeur 1 si votre cible de déploiement est définie sur 7.1. Ce problème est entièrement reproductible avec un nouveau projet à vue unique.

Les étapes de la reproduction :

  1. Créer un nouveau projet à vue unique, objectif-c
  2. Définir la cible de déploiement à 7.1
  3. Ouvrez le storyboard du projet
  4. Déposer une étiquette sur le contrôleur de vue fourni
  5. Définissez le nombre de lignes de cette étiquette à 2.
  6. Compiler

J'ai déposé le radar suivant :
rdar://problem/18700567

Mise à jour 2 :
Malheureusement, c'est à nouveau le cas dans la version de Xcode 6. Notez que vous pouvez, pour la plupart, modifier manuellement votre storyboard/xib pour corriger le problème. Par Charles A. dans les commentaires ci-dessous :

Il est utile de mentionner que vous pouvez assez facilement accidentellement facilement introduire cet avertissement, et l'avertissement lui-même n'aide pas à trouver l'étiquette qui est le coupable. C'est regrettable dans un storyboard. Vous pouvez ouvrir le storyboard en tant que fichier source et rechercher avec la regex *`<label(?!.preferredMaxLayoutWidth)`** pour trouver des étiquettes qui qui ne possèdent pas d'attribut ou de valeur de preferredMaxLayoutWidth. Si vous ajoutez preferredMaxLayoutWidth="0" sur de telles lignes, cela revient à marquer explicite et de définir la valeur 0.

Mise à jour 1 :
Ce bogue a maintenant été corrigé dans Xcode 6 GM.

Réponse originale
Il s'agit d'un bogue dans Xcode6-Beta6 et XCode6-Beta7 et peut être ignoré pour le moment.

Un ingénieur d'Apple, dans les forums des développeurs d'Apple, a dit ceci ce à dire sur le bug :

La largeur maximale préférée de la mise en page est une propriété de mise en page automatique sur UILabel qui qui lui permet de s'agrandir verticalement pour s'adapter à son contenu. Les versions de Xcode antérieures à 6.0 définissaient preferredMaxLayoutWidth pour les étiquettes multilignes à la taille actuelle des limites au moment de la conception. Vous auriez mettre à jour manuellement preferredMaxLayoutWidth au moment de l'exécution si votre disposition horizontale changeait.

iOS 8 a ajouté la prise en charge du calcul automatique preferredMaxLayoutWidth au moment de l'exécution, ce qui facilite encore plus la création encore plus facile. Ce paramètre n'est pas rétrocompatible avec iOS 7. Pour supporter à la fois iOS 7 et iOS 8, Xcode 6 vous permet de choisir entre "Automatic" et "Explicit" pour preferredMaxLayoutWidth dans l'inspecteur de taille. dans l'inspecteur de taille. Vous devriez :

Choisissez "Automatique" si vous visez iOS 8 pour une expérience optimale. Choisissez "Explicite" si vous ciblez < iOS 8. Vous pouvez ensuite entrer la valeur de preferredMaxLayoutWidth que vous souhaitez définir. L'activation de l'option "Explicite correspond par défaut à la taille actuelle des limites au moment où vous avez coché la case.

L'avertissement apparaîtra si (1) vous utilisez la mise en page automatique, (2) "Automatique" est défini pour une étiquette multiligne [vous pouvez le vérifier dans l'inspecteur de taille de l'étiquette]. inspecteur de taille pour l'étiquette], et (3) votre cible de déploiement < iOS 8.

Il semble que le bogue soit que cet avertissement s'affiche pour les éléments qui ne font pas partie de la mise en page automatique. non automatique. Si vous voyez cet avertissement et que vous n'utilisez pas la mise en page automatique vous pouvez ignorer cet avertissement.

Vous pouvez également contourner le problème en utilisant l'inspecteur de fichiers sur le storyboard ou le xib en question et en remplaçant "Builds for" par "Builds for iOS 8.0 and Later". Xcode file inspector

4voto

ronan Points 48

Maintenant, ma version de Xcode est 6.1. Mais j'ai aussi reçu cet avertissement. Cela m'ennuie beaucoup. Après avoir cherché encore et encore, j'ai trouvé la solution.

Motif : Vous devez avoir défini vos lignes UILabel > 1 dans votre Storyboard.

Solution : mettez votre attribut UILabel Lines à 1 dans Storyboard. Redémarrez votre Xcode. Cela fonctionne pour moi, j'espère que cela pourra aider d'autres personnes.

Si vous avez vraiment besoin de montrer vos mots sur plus d'une ligne, vous devez le faire dans le code.

//the words will show in UILabel
NSString *testString = @"Today I wanna set the line to multiple lines. bla bla ......  Today I wanna set the line to multiple lines. bla bla ......"
[self.UserNameLabel setNumberOfLines:0];
self.UserNameLabel.lineBreakMode = NSLineBreakByWordWrapping;
UIFont *font = [UIFont systemFontOfSize:12];
//Here I set the Label max width to 200, height to 60
CGSize size = CGSizeMake(200, 60);
CGRect labelRect = [testString boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName] context:nil];
self.UserNameLabel.frame = CGRectMake(self.UserNameLabel.frame.origin.x, self.UserNameLabel.frame.origin.y, labelRect.size.width, labelRect.size.height);
self.UserNameLabel.text = testString;

2voto

AarneHuttunen Points 1

Je l'ai fait fonctionner en sélectionnant la mise en page originale que j'avais dans la sélection W / H. Storyboard fonctionne comme prévu et l'erreur a disparu.

Assurez-vous également que vous développez pour iOS 8.0. Vérifiez-le dans les paramètres généraux du projet.

C'est ici que vous devez appuyer.

0voto

cafedeichi Points 87

Il semble que ce bogue a été corrigé à la GM Xcode6.

-5voto

Filozof Abi Points 1

J'ai obtenu cette erreur lorsque j'ai voulu utiliser des étiquettes à plusieurs lignes. Au lieu de Label, j'ai utilisé Vue du texte et ça a résolu mon problème.

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