Возможно, что enum МОЖЕТ измениться в будущем и привести к неожиданным результатам. Вот и все. В этом случае сценария конца света нет, но лучшие практики должны преобладать.
Бренден
17
majorl3oat: НЕ рекомендуется использовать постоянное число вместо enum. Перечисление помогает с удобочитаемостью кода, который является чрезвычайно важным фактором. То, что это может сломаться в будущем, - просто плохой дизайн от Apple, и если они сломают его, я бы предпочел иметь ошибки компиляции, чем рискнуть, что выравнивание будет неправильным, без моего ведома.
Робин Андерссон,
6
Робин полностью прав. Несомненно, использование enum - это лучшая практика. Вы можете ВСЕГДА предполагать, что NSTextAlignmentCenter означает CENTER, вы НИКОГДА НЕ можете предположить, что 1 всегда означает CENTER. Если только Apple не совсем придурок.
Расмус
перечисление определенно так, чтобы код не сломался в будущем. Если они решат, что 1 должен быть 42, перечисление будет продолжать работать, жестко закодированное значение потерпит неудачу.
Брайан Оукли
Да, пожалуйста, удалите textAlignment = 1, это будет сбивать людей с толку и распространять плохие знания
MobileMon
45
Изменение 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 ...)…
Начиная с Xcode 9 iOS 11.4 SDK, это все еще решение для меня. [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" size: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // Извлечено - kCTLeftTextAlignment; labelOne.text = dateStr; [headerView addSubview: labelOne];
Мэтью Фергюсон
19
NSTextAlignmentCenterможет быть использован вместо UITextAlignmentCenterи список других замен ниже:
Лучшей конструкцией было бы использовать что-то вроде: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... В противном случае вы получите UITextAlignmentCenter в iOS 7.
Ray Fix
13
Вам не нужно делать ни то, ни другое. Xcode 4.5 скомпилирует и NSTextAlignmentCenterт.д. нормально в iOS 5.
Это похоже на правду. У меня есть проблема с UILineBreakMode и UITextAlignment - и замена их на NSLineBreakMode и NSTextAlignment - отлично работает в Xcode 4.6.3 в симуляторе 5.0 и на iPad под управлением 5.-.
JScarry
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];
NSTextAlignment
.Ответы:
В iOS6 вы можете использовать
Надеюсь это поможет.
источник
Изменение
labelAlignment
свойства, вероятно, связано с тем, что Apple представила NSAttributedStrings для большего количества элементов управления iOS, и поэтому необходимо изменить свойства UIText… на NSText… свойства.Так что, если вы обновились до iOS6, вы в клевер; просто перейти от
UITextAlignmentCenter
кNSTextAlignmentCenter
и наслаждаться фантазии новые строки.Но если вы работаете со сложным проектом и предпочитаете, чтобы земля не двигалась так сильно под вашими ногами, вам может понадобиться какое-то время придерживаться более старой версии и адаптировать свой код для нескольких версий, что-то вроде этого:
Вышеуказанный подход работает для новых методов ; вы получаете предупреждения, но все работает нормально. Но когда компилятор видит константу, о которой он не знает, он становится красным и останавливается. Там нет никакого способа прокрасться
NSTextAlignmentCenter
мимо этого. (Ну, может быть, есть способ настроить поведение компилятора здесь, но это кажется нецелесообразным.)Обходной путь должен добавить некоторые условные определения препроцессора. Если вы поместите что-то подобное в h-файл вашего класса (или, возможно, в импортированный файл констант - который должен сам включать
#import <UIKit/UIKit.h>
, чтобы когда-либо знать о константах NSText ...)……ты можешь сделать это:
И это:
И т.п.
Поскольку эти изменения UIText / NSText, вероятно, будут появляться для нескольких элементов управления, этот подход весьма удобен.
(Предостережение: будучи членом вышеупомянутых любителей устойчивой земли, я проверил это со старой версией, но еще не с iOS6.)
источник
NSTextAlignmentCenter
может быть использован вместоUITextAlignmentCenter
и список других замен ниже:источник
источник
Вам не нужно делать ни то, ни другое. Xcode 4.5 скомпилирует и
NSTextAlignmentCenter
т.д. нормально в iOS 5.источник
источник
источник
У меня была похожая проблема, и я использовал следующее: detailsLabel.textAlignment = NSTextAlignmentCenter;
источник
в iOS 6 или выше
используйте это значение:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
источник
Свифт 3:
источник