不推荐在 iOS6中使用标签对齐

看起来 UITextAlignmentCenter在 iOS6中已经过时了。

我仍然使用它,工作得很好,但它提供了一个警告。

我该怎么补救?

label.textAlignment = UITextAlignmentCenter;

谢谢。

89990 次浏览

在 iOS6中,你可以使用

label.textAlignment = NSTextAlignmentCenter;

labelAlignment属性的改变可能与苹果将 NSAttributedString 引入更多的 iOS 控件有关,因此需要将 UIText... 属性改为 NSText... 属性。

因此,如果你已经升级到 iOS6,那么你是幸运的; 只要从 UITextAlignmentCenter切换到 NSTextAlignmentCenter,就可以享受新奇的字符串了。

但是,如果你正在从事一个复杂的项目,并希望地球不要在你的脚下移动太多,你可能想坚持使用一个旧版本一段时间,并调整你的代码为多个版本,像这样的事情:

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

上面的方法适用于新的 方法; 您会收到警告,但是一切运行良好。但是当编译器看到一个它不知道的 不变时,它就会变红并停止运行。没办法让 NSTextAlignmentCenter溜过去。(好吧,这里可能有一种定制编译器行为的方法,但似乎不可取。)

解决方案是添加一些条件预处理器定义。如果在类的 h 文件中(或者在导入的常量文件中——它本身必须包含 #import <UIKit/UIKit.h>才能了解 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

你可以这么做:

label.textAlignment = kLabelAlignmentCenter;

还有这个:

label.lineBreakMode = kLabelTruncationMiddle;

等等。

由于这些 UIText/NSText 更改可能会出现在多个控件中,因此这种方法非常方便。

(注意: 作为前面提到的稳定地球爱好者的一员,我已经用旧版本测试过了,但还没有用 iOS6。)

#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];

NSTextAlignmentCenter可以替代 UITextAlignmentCenter,其他替代品如下:

#ifdef __IPHONE_6_0 // iOS6 and later
#   define UITextAlignmentCenter    NSTextAlignmentCenter
#   define UITextAlignmentLeft      NSTextAlignmentLeft
#   define UITextAlignmentRight     NSTextAlignmentRight
#   define UILineBreakModeTailTruncation     NSLineBreakByTruncatingTail
#   define UILineBreakModeMiddleTruncation   NSLineBreakByTruncatingMiddle
#endif

在 iOS 5中,Xcode 4.5将编译 NSTextAlignmentCenter,等等。

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;

我有一个类似的问题,并使用以下: TextAlign = NSTextAlignmentCenter;

在 iOS6或更高版本

使用这个值:

self.lbl_age.textAlignment=NSTextAlignmentCenter;

斯威夫特3:

label.textAlignment = NSTextAlignment.center

对于 Swift 5 + 的使用:

yourLabel.textAlignment = .center

你可以设定:

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
}