2012-10-20 53 views
5

Tôi mới sử dụng iPhone,Căn chỉnh văn bản theo chiều dọc trong UILabel

Làm cách nào để căn chỉnh văn bản theo chiều dọc trong nhãn UIL?

Dưới đây là đoạn mã của tôi,

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]; 

văn bản hiển thị trong định dạng của 123456 nhưng tôi muốn văn bản nên được hiển thị theo chiều dọc như thế nào,

6 
5 
4 
3 
2 
1 

Bất kỳ trợ giúp sẽ được appriciated.

+5

Điều này không được gọi là căn chỉnh, điều này được gọi là hướng viết. Căn chỉnh là một thứ hoàn toàn khác. FYI Tôi không nghĩ rằng có một phương pháp để đạt được những gì bạn muốn. Có thể sử dụng CoreText và CoreGraphics, bạn có thể vẽ một CFStringRef như thế này, nhưng không sử dụng UILabel. –

+0

Xin chào, Sử dụng Câu trả lời của tôi Nó hoạt động tốt. Vui lòng sử dụng Tham chiếu tham quan –

Trả lời

6

của nó không thể để gắn kết các văn bản trong UILabel theo chiều dọc. Tuy nhiên, bạn có thể tự động thay đổi chiều cao của nhãn bằng cách sử dụng phương thức sizeWithFont: của NSString và chỉ cần đặt x và y theo ý muốn.

Thay thế, bạn có thể sử dụng UITextField. Nó hỗ trợ các peoperty contentVerticalAlignment vì nó là một phân lớp của UIControl. Bạn phải đặt userInteractionEnabled thành NO để ngăn người dùng nhập văn bản trên đó.

EDIT 1

Vâng thay vì một UILabel, Thực hiện một UITableView như: -

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 Tìm thấy phương pháp sử dụng UILabels quá !! :) Check this out ....

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-vertically-align-a-uilabel-used-as-a-leftview-in-a-uitextfield-with-the-t .. .. Kiểm tra liên kết sau quá .... – IronManGill

+0

Mate, tôi đã thử điều này nhưng không thành công '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

Bạn có muốn sử dụng UILabel không? Coz i có thể cung cấp cho bạn một gợi ý tốt hơn .... – IronManGill

1

Bạn không thể làm allignment dọc nhưng sử dụng một cách khác để hiển thị nó

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 đoạn mã sau là làm việc tốt

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

Nếu nó chỉ là một văn bản xếp hàng đơn như trong ví dụ của bạn, bạn có thể sử dụng cách giải quyết khác nhau. Cá nhân tôi sẽ tạo ra một lớp con UILabel như sau,

@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 

Bây giờ bạn chỉ phải thay thế

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

với

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

để có được văn bản thẳng đứng.

+0

+1 Câu trả lời hay! – Hemang

Các vấn đề liên quan