On dirait que UITextAlignmentCenter
c'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.
On dirait que UITextAlignmentCenter
c'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.
Réponses:
Dans iOS6, vous pouvez utiliser
label.textAlignment = NSTextAlignmentCenter;
J'espère que cela t'aides.
Le labelAlignment
changement de propriété est probablement lié à l'introduction par Apple de NSAttributedStrings à plus de contrôles iOS, et donc à la nécessité de changer les propriétés UIText… en propriétés NSText….
Donc, si vous êtes passé à iOS6, vous êtes dans le trèfle; il suffit de passer de UITextAlignmentCenter
à NSTextAlignmentCenter
et de profiter des nouvelles cordes fantaisie.
Mais si vous travaillez avec un projet complexe et que vous préférez que la terre ne bouge pas autant sous vos pieds, vous voudrez peut-être vous en tenir à une version plus ancienne pendant un certain temps et adapter votre code pour plusieurs versions, quelque chose comme ceci:
// This won't compile:
if ([label respondsToSelector:@selector(attributedText:)])
label.textAlignment = UITextAlignmentCenter;
else
label.textAlignment = NSTextAlignmentCenter;
L'approche ci-dessus fonctionne pour de nouvelles méthodes ; vous recevez des avertissements mais tout fonctionne 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'y a aucun moyen de se faufiler NSTextAlignmentCenter
. (Eh bien, il pourrait y avoir un moyen de personnaliser le comportement du compilateur ici, mais cela semble déconseillé.)
La solution de contournement consiste à ajouter des définitions de préprocesseur conditionnelles. Si vous mettez quelque chose comme ça 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>
afin de toujours 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.
Étant donné que ces modifications UIText / NSText sont susceptibles d'apparaître pour plusieurs contrôles, cette approche est assez pratique.
(Mise en garde: étant membre des amoureux de la terre stable susmentionnés, j'ai testé cela avec une ancienne version, mais pas encore avec iOS6.)
NSTextAlignmentCenter
peut être utilisé à la place de UITextAlignmentCenter
et une liste d'autres remplacements est 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
#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];
Vous n'avez à faire ni l'un ni l'autre. Xcode 4.5 compilera le NSTextAlignmentCenter
, etc. bien dans iOS 5.
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];
labelName.textAlignment=NSTextAlignmentLeft;
J'ai eu un problème similaire et j'ai utilisé ce qui suit: detailsLabel.textAlignment = NSTextAlignmentCenter;
dans iOS 6 ou supérieur
utilisez cette valeur:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
Swift 3:
label.textAlignment = NSTextAlignment.center
Pour Swift 5+, utilisez:
yourLabel.textAlignment = .center
où vous pouvez définir:
public enum NSTextAlignment : Int {
case left = 0 // Visually left aligned
case center = 1 // Visually centered
case right = 2 // Visually right aligned
case justified = 3 // Fully-justified. The last line in a paragraph is natural-aligned.
case natural = 4 // Indicates the default alignment for script
}
NSTextAlignment
.