Es posible que la enumeración PUEDE cambiar en algún momento en el futuro y causar resultados inesperados. Eso es todo. No hay escenario del fin del mundo en este caso, pero las mejores prácticas deben prevalecer.
Brenden
17
majorl3oat: NO es una buena práctica usar un número constante en lugar de enum. La enumeración ayuda con la legibilidad del código, que es un factor extremadamente importante. Que podría romperse en el futuro es solo un mal diseño de Apple, y si lo rompen, preferiría tener errores de compilación que arriesgarme a que la alineación se equivoque sin que me dé cuenta.
Robin Andersson el
66
Robin es COMPLETAMENTE correcto. Usar una enumeración ES la mejor práctica, sin duda. SIEMPRE puede suponer que NSTextAlignmentCenter significa CENTRO, de ninguna manera puede suponer que 1 siempre significa CENTRO. A menos que Apple sea completamente tonto.
Rasmus
una enumeración es específicamente para que el código no se rompa en el futuro. Si deciden que el 1 debe ser un 42, la enumeración seguirá funcionando, el valor codificado fallará.
Bryan Oakley
Sí, elimine textAlignment = 1, confundirá a las personas y difundirá malos conocimientos
MobileMon
45
los labelAlignment cambio de propiedad probablemente esté relacionado con la introducción de NSAttributedStrings de Apple a más controles de iOS y, por lo tanto, la necesidad de cambiar las propiedades UIText ... a propiedades NSText ...
Entonces, si has actualizado a iOS6, estás en trébol; solo cambia de UITextAlignmentCenteraNSTextAlignmentCenter y disfrutar de las cadenas de lujo nuevos.
Pero si está trabajando con un proyecto complejo y prefiere que la tierra no se mueva tanto bajo sus pies, es posible que desee quedarse con una versión anterior por un tiempo y adaptar su código para múltiples versiones, algo como esto:
// This won't compile:if([label respondsToSelector:@selector(attributedText:)])
label.textAlignment =UITextAlignmentCenter;else
label.textAlignment =NSTextAlignmentCenter;
El enfoque anterior funciona para nuevos métodos ; obtienes advertencias pero todo funciona bien. Pero cuando el compilador ve una constante que no conoce, se vuelve roja y se detiene en seco. No hay forma de escabullirse NSTextAlignmentCenter. (Bueno, puede haber una forma de personalizar el comportamiento del compilador aquí, pero parece desaconsejable).
La solución es agregar algunas definiciones de preprocesador condicional. Si coloca algo como esto en el archivo h de su clase (o tal vez en un archivo de constantes importado, que debe incluirse #import <UIKit/UIKit.h>para saber sobre las constantes NSText ...) ...
A partir de Xcode 9 iOS 11.4 SDK, esta sigue siendo la solución para mí. [labelOne setFont: [UIFont fontWithName: @ "HelveticaNeue" tamaño: 20]]; labelOne.textAlignment = NSTextAlignmentLeft; // Tomado - kCTLeftTextAlignment; labelOne.text = dateStr; [headerView addSubview: labelOne];
Matthew Ferguson
19
NSTextAlignmentCenterse puede usar en lugar de UITextAlignmentCenteruna lista de otros reemplazos a continuación:
Una mejor construcción sería usar algo más como: #ifdef (__IPHONE_OS_VERSION_MIN_REQUIRED> = __IPHONE_6_0) .... De lo contrario, obtendrá UITextAlignmentCenter en iOS 7.
Ray Fix
13
No tienes que hacer ninguno de estos. Xcode 4.5 compilará el NSTextAlignmentCenter, etc. bien en iOS 5.
Esto parece ser cierto. Tengo el problema con UILineBreakMode y UITextAlignment, y reemplazarlos con NSLineBreakMode y NSTextAlignment, funciona bien en Xcode 4.6.3 en el simulador 5.0 y en un iPad con 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
.Respuestas:
En iOS6 puedes usar
Espero que esto ayude.
fuente
los
labelAlignment
cambio de propiedad probablemente esté relacionado con la introducción de NSAttributedStrings de Apple a más controles de iOS y, por lo tanto, la necesidad de cambiar las propiedades UIText ... a propiedades NSText ...Entonces, si has actualizado a iOS6, estás en trébol; solo cambia de
UITextAlignmentCenter
aNSTextAlignmentCenter
y disfrutar de las cadenas de lujo nuevos.Pero si está trabajando con un proyecto complejo y prefiere que la tierra no se mueva tanto bajo sus pies, es posible que desee quedarse con una versión anterior por un tiempo y adaptar su código para múltiples versiones, algo como esto:
El enfoque anterior funciona para nuevos métodos ; obtienes advertencias pero todo funciona bien. Pero cuando el compilador ve una constante que no conoce, se vuelve roja y se detiene en seco. No hay forma de escabullirse
NSTextAlignmentCenter
. (Bueno, puede haber una forma de personalizar el comportamiento del compilador aquí, pero parece desaconsejable).La solución es agregar algunas definiciones de preprocesador condicional. Si coloca algo como esto en el archivo h de su clase (o tal vez en un archivo de constantes importado, que debe incluirse
#import <UIKit/UIKit.h>
para saber sobre las constantes NSText ...) ...…Puedes hacerlo:
Y esto:
Etc.
Dado que es probable que estos cambios de UIText / NSText estén apareciendo para múltiples controles, este enfoque es bastante útil.
(Advertencia: al ser miembro de los amantes de la tierra estable antes mencionados, he probado esto con una versión antigua, pero aún no con iOS6).
fuente
NSTextAlignmentCenter
se puede usar en lugar deUITextAlignmentCenter
una lista de otros reemplazos a continuación:fuente
fuente
No tienes que hacer ninguno de estos. Xcode 4.5 compilará el
NSTextAlignmentCenter
, etc. bien en iOS 5.fuente
fuente
fuente
Tuve un problema similar y utilicé lo siguiente: detailsLabel.textAlignment = NSTextAlignmentCenter;
fuente
en iOS 6 o superior
usa este valor:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
fuente
Swift 3:
fuente