web-dev-qa-db-fra.com

Alignement d'étiquette dans iOS 6 - UITextAlignment obsolète

On dirait que UITextAlignmentCenter est obsolète dans iOS 6.

Je l'utilise toujours et fonctionne bien, mais cela donne un avertissement.

Comment puis-je réparer cela?

label.textAlignment = UITextAlignmentCenter;

Merci.

189
user123

Dans iOS6, vous pouvez utiliser

label.textAlignment = NSTextAlignmentCenter;

J'espère que cela t'aides.

392
majorl3oat

La modification de propriété labelAlignment est probablement liée à l’introduction par NSA de NSAttributedStrings à un plus grand nombre de contrôles iOS et à la nécessité de modifier les propriétés UIText… en propriétés NSText….

Donc, si vous êtes passé à iOS6, vous êtes dans le trèfle; passez simplement de UITextAlignmentCenter à NSTextAlignmentCenter et profitez de nouvelles chaînes fantaisistes.

Mais si vous travaillez avec un projet complexe et préférez que la Terre ne bouge pas trop, vous voudrez peut-être rester avec une version plus ancienne pendant un moment et adapter votre code à plusieurs versions, comme ceci:

// This won't compile:
if ([label respondsToSelector:@selector(attributedText:)]) 
    label.textAlignment = UITextAlignmentCenter;
else 
    label.textAlignment = NSTextAlignmentCenter;

L'approche ci-dessus fonctionne pour new method; vous recevez des avertissements mais tout se passe bien. Mais lorsque le compilateur voit une constante qu’il ne connaît pas, il devient rouge et s’arrête sur ses traces. Il n’ya aucun moyen de passer furtivement NSTextAlignmentCenter. (Eh bien, il pourrait y avoir un moyen de personnaliser le comportement du compilateur ici, mais cela semble déconseillé.)

La solution consiste à ajouter des définitions de préprocesseur conditionnel. Si vous mettez quelque chose comme ceci dans le fichier h de votre classe (ou peut-être dans un fichier de constantes importé - qui doit lui-même inclure #import <UIKit/UIKit.h> pour pouvoir connaître les constantes NSText ...)……

#ifdef NSTextAlignmentCenter // iOS6 and later
#   define kLabelAlignmentCenter    NSTextAlignmentCenter
#   define kLabelAlignmentLeft      NSTextAlignmentLeft
#   define kLabelAlignmentRight     NSTextAlignmentRight
#   define kLabelTruncationTail     NSLineBreakByTruncatingTail 
#   define kLabelTruncationMiddle   NSLineBreakByTruncatingMiddle
#else // older versions
#   define kLabelAlignmentCenter    UITextAlignmentCenter
#   define kLabelAlignmentLeft      UITextAlignmentLeft
#   define kLabelAlignmentRight     UITextAlignmentRight
#   define kLabelTruncationTail     UILineBreakModeTailTruncation
#   define kLabelTruncationMiddle   UILineBreakModeMiddleTruncation
#endif

…tu peux le faire:

label.textAlignment = kLabelAlignmentCenter;

Et ça:

label.lineBreakMode = kLabelTruncationMiddle;

Etc.

Etant donné que ces modifications UIText/NSText sont susceptibles d’apparaître pour plusieurs contrôles, cette approche est très pratique.

(Mise en garde: étant un membre des amoureux de la terre ferme susmentionnés, j'ai testé cela avec une ancienne version, mais pas encore avec iOS6.)

44
Wienke

NSTextAlignmentCenter peut être utilisé à la place de UITextAlignmentCenter et une liste d'autres remplacements est présentée ci-dessous:

#ifdef __IPHONE_6_0 // iOS6 and later
#   define UITextAlignmentCenter    NSTextAlignmentCenter
#   define UITextAlignmentLeft      NSTextAlignmentLeft
#   define UITextAlignmentRight     NSTextAlignmentRight
#   define UILineBreakModeTailTruncation     NSLineBreakByTruncatingTail
#   define UILineBreakModeMiddleTruncation   NSLineBreakByTruncatingMiddle
#endif
19
nhisyam
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0)
# define ALIGN_CENTER NSTextAlignmentCenter
#else
# define ALIGN_CENTER UITextAlignmentCenter
#endif

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
label.text = @"There is no spoon";
label.textAlignment = ALIGN_CENTER;
[self addSubview:label];
15
neoneye

Vous n'avez pas à faire l'un ou l'autre. Xcode 4.5 compilera la NSTextAlignmentCenter, etc. dans iOS 5.

13
Aaron Brager
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 150, 40)];
[label1 setText:@"Your String"];
[label1 setBackgroundColor:[UIColor clearColor]];
[label1 setNumberOfLines:0];
[label1 sizeToFit];

//For Center Alignment
[label1 setTextAlignment:NSTextAlignmentCenter];

//For Right Alignment
[label1 setTextAlignment:NSTextAlignmentRight];

//For Left Alignment
[label1 setTextAlignment:NSTextAlignmentLeft];

// Add the label into the view

[self.view addSubview:label1];
2
Gaurav Gilani
labelName.textAlignment=NSTextAlignmentLeft;
1
Mubin Shaikh

sous iOS 6 ou supérieur

utiliser cette valeur:

self.lbl_age.textAlignment=NSTextAlignmentCenter;

0
Hiren Dhamecha

Swift 3:

label.textAlignment = NSTextAlignment.center
0
Jerry Krinock

J'ai eu un problème similaire et utilisé les éléments suivants: detailsLabel.textAlignment = NSTextAlignmentCenter;

0
BrainyMonkey