iOS 6中的标签对齐 - 不推荐使用UITextAlignment

时间:2012-08-12 06:57:48

标签: ios alignment label

在iOS 6中不推荐使用UITextAlignmentCenter

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

我该如何解决这个问题?

label.textAlignment = UITextAlignmentCenter;

感谢。

11 个答案:

答案 0 :(得分:391)

在iOS6中,您可以使用

label.textAlignment = NSTextAlignmentCenter;

希望这有帮助。

答案 1 :(得分:44)

labelAlignment属性更改可能与Apple将NSAttributedStrings引入更多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测试过。)

答案 2 :(得分: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

答案 3 :(得分: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];

答案 4 :(得分:13)

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

答案 5 :(得分: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];

答案 6 :(得分:1)

labelName.textAlignment=NSTextAlignmentLeft;

答案 7 :(得分:0)

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

答案 8 :(得分:0)

iOS 6或更高版本中的

使用此值:

self.lbl_age.textAlignment=NSTextAlignmentCenter;

答案 9 :(得分:0)

斯威夫特3:

label.textAlignment = NSTextAlignment.center

答案 10 :(得分: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 
}