似乎UITextAlignmentCenter
在 iOS 6 中已弃用。
我仍然使用它并且效果很好,但它会发出警告。
我怎样才能解决这个问题?
label.textAlignment = UITextAlignmentCenter;
谢谢。
In iOS6 you can use
label.textAlignment = NSTextAlignmentCenter;
属性更改可能与Apple将labelAlignment
NSAttributedStrings 引入更多iOS 控件有关,因此需要将UIText... 属性更改为NSText... 属性。
因此,如果您已升级到 iOS6,那么您就处于 clover 中;只需切换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...常量)......</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 上测试过。)
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
#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];
您不必执行其中任何一项。Xcode 4.5 将NSTextAlignmentCenter
在 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;
对于 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
}
我遇到了类似的问题并使用了以下内容: detailsLabel.textAlignment = NSTextAlignmentCenter;
在 iOS 6 或更高版本中
使用这个值:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
斯威夫特 3:
label.textAlignment = NSTextAlignment.center