Здається, що UITextAlignmentCenter
в iOS 6 застаріло.
Я все ще користуюся ним і добре працює, але це дає попередження.
Як я можу це виправити?
label.textAlignment = UITextAlignmentCenter;
Дякую.
Здається, що UITextAlignmentCenter
в iOS 6 застаріло.
Я все ще користуюся ним і добре працює, але це дає попередження.
Як я можу це виправити?
label.textAlignment = UITextAlignmentCenter;
Дякую.
Відповіді:
В iOS6 ви можете використовувати
label.textAlignment = NSTextAlignmentCenter;
Сподіваюся, це допомагає.
Зміна 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, ймовірно, з'являться для кількох елементів керування, такий підхід є досить зручним.
(Caveat: Будучи членом вищезгаданих любителів стаціонарних земель, я перевірив це за допомогою старої версії, але ще не з 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;
У мене була подібна проблема, і я використав наступне: detailsLabel.textAlignment = NSTextAlignmentCenter;
в iOS 6 або новішої версії
використовувати це значення:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
Швидкий 3:
label.textAlignment = NSTextAlignment.center
NSTextAlignment
.