Możliwe, że wyliczenie MOGĄ ulec zmianie w przyszłości i spowodować nieoczekiwane rezultaty. To wszystko. W tym przypadku nie ma scenariusza dnia zagłady, ale powinny przeważyć lepsze praktyki.
Brenden,
17
majorl3oat: NIE jest najlepszą praktyką stosowanie stałej liczby zamiast wyliczania. Wyliczanie pomaga w czytelności kodu, co jest niezwykle ważnym czynnikiem. To, że może się zepsuć w przyszłości, jest po prostu złym projektem Apple, a jeśli się zepsują, wolę mieć błędy kompilacji niż ryzykować, że wyrównanie nie powiedzie się bez mojej uwagi.
Robin Andersson
6
Robin jest całkowicie poprawny. Bez wątpienia stosowanie najlepszej praktyki enum IS. Możesz ZAWSZE zakładać, że NSTextAlignmentCenter oznacza CENTRUM, nie możesz W ŻADNY SPOSÓB zakładać, że 1 zawsze oznacza CENTRUM. Chyba że Apple jest całkowicie głupi.
Rasmus
wyliczenie jest specyficzne, więc kod nie pęka w przyszłości. Jeśli zdecydują, że 1 powinno być 42, wyliczenie będzie nadal działać, wartość zakodowana na stałe zawiedzie.
Bryan Oakley,
Tak, usuń textAlignment = 1, wprowadzi to zamieszanie i rozpowszechni złą wiedzę
MobileMon
45
Zmiana labelAlignmentwłaściwości jest prawdopodobnie związana z wprowadzeniem przez Apple NSAttributStrings do większej liczby elementów sterujących iOS, a zatem wymaga zmiany właściwości UIText… na NSText….
Jeśli więc uaktualniłeś system do iOS6, jesteś koniczyną; wystarczy przełączyć od UITextAlignmentCenterdo NSTextAlignmentCenteri cieszyć się fantazyjne nowe struny.
Ale jeśli pracujesz nad złożonym projektem i wolisz, aby Ziemia nie poruszała się tak bardzo pod stopami, możesz przez pewien czas trzymać się starszej wersji i dostosować swój kod do wielu wersji, coś takiego:
// This won't compile:if([label respondsToSelector:@selector(attributedText:)])
label.textAlignment =UITextAlignmentCenter;else
label.textAlignment =NSTextAlignmentCenter;
Powyższe podejście działa w przypadku nowych metod ; otrzymujesz ostrzeżenia, ale wszystko działa dobrze. Ale gdy kompilator zobaczy stałą , o której nie wie, zmienia kolor na czerwony i zatrzymuje się. Nie ma sposobu, aby się wymknąć NSTextAlignmentCenter. (Cóż, może istnieć sposób na dostosowanie zachowania kompilatora tutaj, ale wydaje się to niewskazane).
Obejściem tego problemu jest dodanie niektórych warunkowych definicji preprocesora. Jeśli umieścisz coś takiego w pliku h swojej klasy (lub być może w importowanym pliku stałych - który sam musi zawierać #import <UIKit/UIKit.h>, aby kiedykolwiek wiedzieć o stałych NSText ...)…
To wydaje się być prawdą. Mam problem z UILineBreakMode i UITextAlignment - i zastąpienie ich NSLineBreakMode i NSTextAlignment - działa dobrze w Xcode 4.6.3 w symulatorze 5.0 i na iPadzie z systemem 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
.Odpowiedzi:
W iOS6 możesz użyć
Mam nadzieję że to pomoże.
źródło
Zmiana
labelAlignment
właściwości jest prawdopodobnie związana z wprowadzeniem przez Apple NSAttributStrings do większej liczby elementów sterujących iOS, a zatem wymaga zmiany właściwości UIText… na NSText….Jeśli więc uaktualniłeś system do iOS6, jesteś koniczyną; wystarczy przełączyć od
UITextAlignmentCenter
doNSTextAlignmentCenter
i cieszyć się fantazyjne nowe struny.Ale jeśli pracujesz nad złożonym projektem i wolisz, aby Ziemia nie poruszała się tak bardzo pod stopami, możesz przez pewien czas trzymać się starszej wersji i dostosować swój kod do wielu wersji, coś takiego:
Powyższe podejście działa w przypadku nowych metod ; otrzymujesz ostrzeżenia, ale wszystko działa dobrze. Ale gdy kompilator zobaczy stałą , o której nie wie, zmienia kolor na czerwony i zatrzymuje się. Nie ma sposobu, aby się wymknąć
NSTextAlignmentCenter
. (Cóż, może istnieć sposób na dostosowanie zachowania kompilatora tutaj, ale wydaje się to niewskazane).Obejściem tego problemu jest dodanie niektórych warunkowych definicji preprocesora. Jeśli umieścisz coś takiego w pliku h swojej klasy (lub być może w importowanym pliku stałych - który sam musi zawierać
#import <UIKit/UIKit.h>
, aby kiedykolwiek wiedzieć o stałych NSText ...)……możesz to zrobić:
I to:
Itp.
Ponieważ zmiany UIText / NSText prawdopodobnie pojawią się w przypadku wielu kontrolek, takie podejście jest całkiem przydatne.
(Zastrzeżenie: Będąc członkiem wyżej wymienionych miłośników stałej ziemi, przetestowałem to na starej wersji, ale jeszcze nie na iOS6.)
źródło
NSTextAlignmentCenter
może być użyty zamiast,UITextAlignmentCenter
a lista innych zamienników znajduje się poniżej:źródło
źródło
Nie musisz tego robić. Xcode 4.5 skompiluje
NSTextAlignmentCenter
itp. W porządku w iOS 5.źródło
źródło
źródło
Miałem podobny problem i użyłem następującego: detailsLabel.textAlignment = NSTextAlignmentCenter;
źródło
w iOS 6 lub nowszym
użyj tej wartości:
self.lbl_age.textAlignment=NSTextAlignmentCenter;
źródło
Swift 3:
źródło