Il est possible que l'énumération PEUT changer à un moment donné dans le futur et provoquer des résultats inattendus. C'est tout. Pas de scénario apocalyptique dans ce cas, mais de meilleures pratiques devraient prévaloir.
Brenden
17
majorl3oat: Il n'est PAS recommandé d'utiliser un nombre constant au lieu d'énumération. L'énumération contribue à la lisibilité du code, ce qui est un facteur extrêmement important. Qu'il puisse se casser à l'avenir est juste une mauvaise conception d'Apple, et s'ils le cassent, je préférerais avoir des erreurs de compilation que de risquer que l'alignement se trompe sans que je m'en aperçoive.
Robin Andersson
6
Robin a TOTALEMENT raison. L'utilisation d'une énumération est la meilleure pratique, sans aucun doute. Vous pouvez TOUJOURS supposer que NSTextAlignmentCenter signifie CENTRE, vous ne pouvez en aucun cas supposer que 1 signifie toujours CENTRE. À moins qu'Apple ne soit complètement idiot.
Rasmus
une énumération est spécifiquement pour que le code ne se casse pas à l'avenir. S'ils décident que le 1 doit être un 42, l'énumération continuera à fonctionner, la valeur codée en dur échouera.
Bryan Oakley
Oui s'il vous plaît supprimer le textAlignment = 1, cela déroutera les gens et répandra de mauvaises connaissances
MobileMon
45
Le labelAlignmentchangement 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à NSTextAlignmentCenteret 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:
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 ...) ...
À partir du SDK Xcode 9 iOS 11.4, c'est toujours la solution pour moi. [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" taille: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // Retiré - kCTLeftTextAlignment; labelOne.text = dateStr; [headerView addSubview: labelOne];
Matthew Ferguson
19
NSTextAlignmentCenterpeut être utilisé à la place de UITextAlignmentCenteret une liste d'autres remplacements est ci-dessous:
Une meilleure construction serait d'utiliser quelque chose de plus comme: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... Sinon, vous allez obtenir UITextAlignmentCenter sous iOS 7.
Ray Fix
13
Vous n'avez à faire ni l'un ni l'autre. Xcode 4.5 compilera le NSTextAlignmentCenter, etc. bien dans iOS 5.
Cela semble être vrai. J'ai le problème avec UILineBreakMode et UITextAlignment - et en les remplaçant par NSLineBreakMode et NSTextAlignment - fonctionne bien dans Xcode 4.6.3 dans le simulateur 5.0 et sur un iPad exécutant 5.-.
JScarry
2
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];
publicenumNSTextAlignment : Int{
caseleft = 0// Visually left alignedcase center = 1// Visually centeredcaseright = 2// Visually right alignedcase justified = 3// Fully-justified. The last line in a paragraph is natural-aligned.case natural = 4// Indicates the default alignment for script
}
NSTextAlignment
.Réponses:
Dans iOS6, vous pouvez utiliser
label.textAlignment = NSTextAlignmentCenter;
J'espère que cela t'aides.
la source
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.)
la source
NSTextAlignmentCenter
peut être utilisé à la place deUITextAlignmentCenter
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
la source
#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];
la source
Vous n'avez à faire ni l'un ni l'autre. Xcode 4.5 compilera le
NSTextAlignmentCenter
, etc. bien dans iOS 5.la source
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];
la source
labelName.textAlignment=NSTextAlignmentLeft;
la source
J'ai eu un problème similaire et j'ai utilisé ce qui suit: detailsLabel.textAlignment = NSTextAlignmentCenter;
la source
dans iOS 6 ou supérieur
utilisez cette valeur:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
la source
Swift 3:
label.textAlignment = NSTextAlignment.center
la source
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 }
la source