2011-07-02 42 views
22

Trong ứng dụng của tôi, tôi có nhiều lần xem bảng với các ô tùy chỉnh. Một số văn bản trong các ô được trải ra ở giữa 2-4 dòng sao cho chiều cao của nhãn đủ lớn để chứa nội dung.Có thể sắp xếp văn bản theo chiều dọc bên trong nhãn bằng khung "lớn"

Tuy nhiên trên iPad màn hình lớn hơn và tôi muốn văn bản xuất hiện ở góc trên bên trái của nhãn, chứ không phải ở giữa như khi bạn sử dụng thuộc tính numberOfLines. Tôi biết bạn có thể sắp xếp theo chiều ngang văn bản, nhưng nó phải có khả năng sắp xếp văn bản ở trên cùng bên trái? Hay là không thể.

Ảnh chụp màn hình:

enter image description here

+0

Kiểm tra trang này [Căn dọc văn bản trong một nhãn UILabel] [1] http://stackoverflow.com/questions/1054558/vertically-align-text-within-a-uilabel?rq=1 – Adison

Trả lời

20

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 các nhãn sử dụng sizeWithFont: phương pháp NSString, và chỉ cần đặt nó xy như bạn muốn.

Thay vào đó, bạn có thể sử dụng UITextField. Nó hỗ trợ contentVerticalAlignment peoperty 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 đó.

+0

cảm ơn bạn, uitextfield sẽ dẫn đến hiệu suất kém hơn hoặc những thứ khác trong tableviewcell hoặc là nó chỉ là tốt? – LuckyLuke

+0

@Andreas, Có. Tốt để sử dụng UITextField bên trong các ô xem bảng. Theo ý kiến ​​cá nhân của tôi, sử dụng UILabels và tự động định cỡ nó sẽ là một cách chính xác. Dù sao, tối đa của nó để bạn lựa chọn. Cả hai cách đều ổn. ;-) – EmptyStack

+0

Với UITextField bạn có khung xấu xí xung quanh văn bản không? –

3

tôi thực sự nhận thấy rằng việc sử dụng

[Blue setSizeToFit] 

không sắp xếp theo chiều dọc để đầu trang. Mặc định là trung tâm.

+1

Cách nó thực sự hoạt động là nó vẫn được căn giữa nhưng bây giờ phần trên vẫn giữ nguyên và hộp chỉ là "đúng" để có vẻ như nó được xếp thẳng hàng. Điều này phục vụ mục đích của hầu hết mọi người. Tuy nhiên, bạn có thể đặt nền cho một màu nhất định và xác minh mọi thứ kết thúc. –

+0

Người đàn ông tuyệt vời !!!! nó làm việc cho tôi trong tableviwecell. –

+0

đảm bảo ràng buộc của bạn được đặt chính xác, sao cho nhãn được phép thu nhỏ hoặc phát triển –

3

sizeToFit không hoạt động trong UITableCellView, vì các ô được sử dụng lại trong khi cuộn.

Giải pháp là tính toán chiều cao ô bảng theo phông chữ và kích thước phông chữ và điều chỉnh chiều cao nhãn cho nó.

Vì nó là khá khó khăn để tìm ra giải pháp trên web tôi đã viết một short post về nó

1

Đây là cùng một câu hỏi được hỏi bởi một ai đó. bạn sẽ tìm thấy cách thích hợp hơn để giải quyết vấn đề này. Họ đã giải thích rất tốt về nó.

Tôi nghĩ vậy, bạn nên xem xét điều này.

ở đây trong chuỗi đó, nhiều câu trả lời đề xuất đặt khung động cho UILabel trên cơ sở text như đoạn mã dưới đây được mô tả.

CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode]; 
    lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height); 
    lblTitle.text = theText; 

    // lblTitle is the Label used for showing the Text. 

bạn có thể nhận được ý tưởng chính xác hơn thay vì sử dụng textFieldhere it is

2

tôi thêm vào trong viewDidLoad

self.textLabel.numberOfLines = 0; 
[self.textLabel sizeToFit]; 

chắc chắn khó khăn của bạn được thiết lập đúng, do đó nhãn được phép để thu hẹp hoặc lớn lên. Nếu không nó sẽ không hoạt động.

3

Bạn có thể làm điều đó như sau

  1. Set của nhãn của bạn numberOfLines sở hữu 0 từ IB

  2. Set của nhãn của bạn lineBreakMode như UILineBreakModeWordWrap (rất rất quan trọng)

bây giờ bất cứ điều gì bạn đặt trên nhãn chỉ thêm vài @ "\ n" vào nó ..... ex.-

[yourTextLabel setText:@"myLabel\n\n\n\n\n"]; 
+0

Nếu bạn làm điều này, văn bản sẽ luôn có dấu chấm lửng, phải không? – Daniel

3

Trong iOS 7 sizeWithFont: hiện không còn được dùng nữa! Một số giải pháp như phân lớp UILabel phải được điều chỉnh.

Giải pháp của tôi cho đầu thẳng hàng text label: Trong một lớp con TopVerticalAlignmentLabel : UILabel override drawRect: như sau:

- (void)drawRect:(CGRect)rect 
{ 
    CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) 
                options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
                attributes:@{ NSFontAttributeName: self.font, /* further attributes */} 
                context:nil]; 

    [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)]; 
} 
0

bạn chỉ có thể sử dụng một UITextView, và Set UserInteraction nó Enabled để Không, Và Tất cả các vấn đề của bạn sẽ được giải quyết!

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