193

似乎UITextAlignmentCenter在 iOS 6 中已弃用。

我仍然使用它并且效果很好,但它会发出警告。

我怎样才能解决这个问题?

label.textAlignment = UITextAlignmentCenter;

谢谢。

4

11 回答 11

397

In iOS6 you can use

label.textAlignment = NSTextAlignmentCenter;
于 2012-09-22T02:42:39.780 回答
44

属性更改可能与Apple将labelAlignmentNSAttributedStrings 引入更多iOS 控件有关,因此需要将UIText... 属性更改为NSText... 属性。

因此,如果您已升级到 iOS6,那么您就处于 clover 中;只需切换UITextAlignmentCenterNSTextAlignmentCenter并享受花哨的新琴弦。

但是,如果您正在处理一个复杂的项目,并且希望地球不要在您的脚下移动太多,您可能希望坚持使用旧版本一段时间,并将您的代码调整为多个版本,如下所示:

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

上述方法适用于新方法;您会收到警告,但一切正常。但是当编译器看到一个它不知道的常量时,它会变成红色并停在它的轨道上。没有办法偷偷溜NSTextAlignmentCenter过去。(好吧,这里可能有一种方法可以自定义编译器的行为,但似乎不可取。)

解决方法是添加一些条件预处理器定义。如果你把这样的东西放在你的类的 h 文件中(或者可能放在一个导入的常量文件中——它本身必须包含#import <UIKit/UIKit.h>才能知道 NSText...常量)......</p>

#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 上测试过。)

于 2012-09-27T22:56:21.760 回答
19

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
于 2012-11-15T05:58:08.093 回答
15
#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];
于 2012-10-20T12:24:08.903 回答
13

您不必执行其中任何一项。Xcode 4.5 将NSTextAlignmentCenter在 iOS 5 中编译,等等。

于 2013-01-09T23:08:50.733 回答
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];
于 2014-05-21T13:41:58.313 回答
1
labelName.textAlignment=NSTextAlignmentLeft;
于 2014-05-21T13:44:57.170 回答
0

对于 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 
}
于 2020-09-04T08:11:46.953 回答
0

我遇到了类似的问题并使用了以下内容: detailsLabel.textAlignment = NSTextAlignmentCenter;

于 2015-07-22T09:56:44.737 回答
0

在 iOS 6 或更高版本中

使用这个值:

self.lbl_age.textAlignment=NSTextAlignmentCenter;

于 2016-03-30T10:56:37.747 回答
0

斯威夫特 3:

label.textAlignment = NSTextAlignment.center
于 2016-10-19T17:37:29.267 回答