2012-10-20 9 views
5

Jestem nowy na iPhone,Wyrównanie w pionie tekstu w UILabel

Jak wyrównać w pionie mój tekst w UILabel?

Oto fragment mojego kodu,

UILabel *lbl=[[UILabel alloc]init]; 
    lbl.frame=CGRectMake(10,10,100,100); 
    lbl.backgroundColor=[UIColor clearColor]; 
    lbl.font=[UIFont systemFontOfSize:13]; 
    [email protected]"123456"; 
    [scrollVw addSubview:lbl]; 

tekst wyświetlany jest w formacie 123456 ale chcę tekst powinien być wyświetlany w pionie jak,

6 
5 
4 
3 
2 
1 

Każda pomoc będzie appriciated.

+5

Nie nazywa się to wyrównaniem, nazywa się to kierunkiem zapisu. Wyrównanie to coś zupełnie innego. FYI Nie sądzę, że istnieje metoda osiągnięcia tego, co chcesz. Może używając CoreText i CoreGraphics, możesz narysować CFStringRef w ten sposób, ale nie używając UILabel. –

+0

Cześć, użyj mojej odpowiedzi To działa dobrze. Proszę skorzystać z przewodnika Referencje –

Odpowiedz

6

Jest niemożliwe, aby wyrównać tekst w UILabel pionie. Można jednak dynamicznie zmieniać wysokość etykiety za pomocą metody sizeWithFont: z poziomu NSString i po prostu ustawić jej wartości x i y zgodnie z potrzebami.

Jako alternatywę można użyć UITextField. Obsługuje peoperty contentVerticalAlignment, ponieważ jest podklasą UIControl. Musisz ustawić jego userInteractionEnabled na NO, aby uniemożliwić użytkownikowi wpisywanie tekstu na nim.

EDIT 1

Więc zamiast UILabel, Zrób UITableView jak: -

TableActivityLevel=[[UITableView alloc] initWithFrame:CGRectMake(224, 203, 27, 0) style:UITableViewStylePlain]; 
TableActivityLevel.delegate=self; 
TableActivityLevel.dataSource=self; 
TableActivityLevel.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
TableActivityLevel.rowHeight = 17; 
TableActivityLevel.backgroundColor=[UIColor clearColor];  
TableActivityLevel.layer.borderColor = [[UIColor clearColor]CGColor]; 
TableActivityLevel.separatorStyle = UITableViewCellSeparatorStyleNone; 

EDIT 2 Znaleziono metodę używając UILabels zbyt !! :) Sprawdź to ....

UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 10.0, 100.0)]; 
[label1 setBackgroundColor:[UIColor clearColor]]; 
[label1 setNumberOfLines:0]; 
[label1 setCenter:self.view.center]; 
[label1 setFont:[UIFont fontWithName:@"Helvetica" size:12.0]]; 
[label1 setTextColor:[UIColor whiteColor]]; 
[label1 setTextAlignment:UITextAlignmentCenter]; 
[label1 setText:@"1 2 3 4 5 6"]; 
[self.view addSubview:label1]; 
+0

http://stackoverflow.com/questions/11332782/how-to-vertical-align-a-uilabel-used-as-a-leftview-in-a-itext-z-the-the-t ... .. Sprawdź także poniższy link .... – IronManGill

+0

Mate, próbowałem tego ale nie powiodło się 'textfield = [[UITextField alloc] init]; UILabel * startsWith = [[UILabel alloc] init]; startsWith.frame = CGRectMake (20, 20, 20, 20); startsWith.font = self.textfield.font; startsWith.textAlignment = self.textfield.textAlignment; startsWith.textColor = [UIColor blackColor]; startsWith.backgroundColor = [UIColor clearColor]; startsWith.text = @ "123456"; [startsWith sizeToFit]; startsWith.frame = CGRectOffset (startsWith.frame, 0, -1); [scrollVw addSubview: startsWith]; self.textfield.leftViewMode = UITextFieldViewModeAlways; ' – Krunal

+0

Czy chcesz używać tylko UILabel ?? Coz, mogę dać ci lepszą sugestię .... – IronManGill

1

cant zrobić pionowy ułożeniu jednak użyć innego sposobu, aby go wyświetlić

UILabel *lbl=[[UILabel alloc]init]; 
lbl.frame=CGRectMake(10,10,100,400); 
lbl.backgroundColor=[UIColor clearColor]; 
lbl.font=[UIFont systemFontOfSize:13]; 
[email protected]"1\n2\n3\n4\n5\n6"; 
[scrollVw addSubview:lbl]; 
3

Hi następujący kod jest praca dobrze

UILabel *lbl=[[UILabel alloc]init]; 
lbl.frame=CGRectMake(10,10,10,300); 
lbl.backgroundColor=[UIColor clearColor]; 
lbl.numberOfLines=6; // Use one to 6 numbers 
lbl.font=[UIFont systemFontOfSize:13]; 
[email protected]"123456"; 

NSString *reverse=lbl.text; 
NSMutableString *reversedString = [NSMutableString string]; 
NSInteger charIndex = [reverse length]; 
while (charIndex > 0) { 
    charIndex--; 
    NSRange subStrRange = NSMakeRange(charIndex, 1); 
    [reversedString appendString:[reverse substringWithRange:subStrRange]]; 
} 
NSLog(@"%@", reversedString); 


CGSize labelSize = [lbl.text sizeWithFont:lbl.font 
          constrainedToSize:lbl.frame.size 
           lineBreakMode:lbl.lineBreakMode]; 
lbl.frame = CGRectMake(
         lbl.frame.origin.x, lbl.frame.origin.y, 
         lbl.frame.size.width, labelSize.height); 


lbl.text=reversedString; 

[scrollview addSubview:lbl]; 
2
UILabel *lbl=[[UILabel alloc]init]; 
    lbl.frame=CGRectMake(10,10,10,100); 
    lbl.backgroundColor=[UIColor clearColor]; 
    lbl.font=[UIFont systemFontOfSize:13]; 
    [email protected]"123456"; 
    lbl.numberOfLines = 10; 
    [self.view addSubview:lbl]; 
4

Jeśli jest tylko jeden tekst wyłożone jak w przykładzie można stosować różne rozwiązania. Osobiście utworzyć podklasę UILabel następująco,

@implementation VerticalLabel 

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     self.numberOfLines = 0; 
    } 
    return self; 
} 

- (void)setText:(NSString *)text { 
    NSMutableString *newString = [NSMutableString string]; 
    for (int i = text.length-1; i >= 0; i--) { 
     [newString appendFormat:@"%c\n", [text characterAtIndex:i]]; 
    } 

    super.text = newString; 
} 

@end 

Teraz po prostu trzeba wymienić

UILabel *lbl = [[UILabel alloc] init]; 

z

UILabel *lbl = [[VerticalLabel alloc] init]; 

uzyskać tekst pionowy.

+0

+1 Dobra odpowiedź! – Hemang