2010-11-04 36 views
44

Trong dự án của tôi, có một văn bản UILabel. Kích thước phông chữ là 16pt. Nội dung văn bản được thay đổi tùy thuộc vào các trường hợp khác nhau. Tôi hy vọng nó có thể tự động điều chỉnh chiều rộng của UILabel để phù hợp với tổng chiều rộng của văn bản mà không kéo dài.Cách điều chỉnh và tạo chiều rộng của một nhãn UILabel cho vừa với kích cỡ chữ?

Có thể không?

Trả lời

106

này giả định bạn đã thiết lập font:

label.text = @"some text"; 
[label sizeToFit]; 

Bạn cũng sẽ cần phải xác định chiều rộng tối đa, và cho chương trình của bạn biết phải làm gì nếu sizeToFit cung cấp cho bạn chiều rộng lớn hơn chiều rộng tối đa đó.

+3

phương thức sizeToFit là phương thức của UIView. – TopChul

+53

cách xác định chiều rộng tối đa? –

+0

+1 Câu trả lời này đã giúp tôi điều tốt nhất. –

7

Tôi thấy ba tùy chọn ở đây.

Trước tiên, hãy đặt kích thước của nhãn đủ lớn để giữ bất kỳ văn bản nào. Điều đó đơn giản nhất, nhưng không phải lúc nào cũng hoạt động tốt - phụ thuộc vào quan điểm xung quanh.

Thứ hai, Nhãn có thể điều chỉnh kích thước phông chữ cho văn bản dài hơn (adjustsFontSizeToFitWidth thuộc tính). Điều này thường không được mong muốn, các phông chữ khác nhau trong các phần tử có thể trông xấu xí.

Tùy chọn cuối cùng là lập lại kích thước nhãn theo cách văn bản hiện đang giữ của nhãn đó. Để tính toán kích thước cần thiết để giữ văn bản với một cái gì đó sử dụng font chữ hiện tại như thế này:

CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap]; 
+0

Nếu chúng ta sử dụng UILineBreakModeWordWrap chúng ta có thể nhập nhiều dòng trên UILabel, Làm thế nào tôi có thể thiết lập các không gian ranh giới giữa hai dòng. –

21

Dưới đây là cách thực hiện, giả sử messageLabel sau đây là nhãn bạn muốn có hiệu ứng mong muốn. Bây giờ, hãy thử các dòng đơn giản của các mã:

// Set width constraint for label; it's actually the width of your UILabel 
    CGFloat constrainedWidth = 240.0f; 
    // Calculate space for the specified string 
    CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)]; 
    messageLabel.text = yourText; 
    messageLabel.numberOfLines = 0;// This will make the label multiline 
+7

Điều này thực sự là một câu trả lời thực sự tốt ... Chỉ cần không cho câu hỏi cụ thể này! Câu trả lời này hoạt động tốt khi bạn muốn tự động điều chỉnh * chiều cao * của một 'UILabel' trong khi duy trì độ rộng cố định. Đó là thực tế những gì tôi đang tìm kiếm khi tôi đi qua trang này. Tôi rất muốn bình chọn câu trả lời của bạn ... nhưng nó không trả lời câu hỏi. Giải pháp tốt tuy nhiên và có lẽ sẽ giúp những người khác vấp ngã trên trang này. –

+1

Cảm ơn jon! Thực ra tôi cũng đang tìm kiếm giải pháp này và tình cờ tôi đã xoay xở để tạo ra nó, và sau đó nghĩ rằng tôi nên chia sẻ nó ở đây. :) BTW, chính xác những gì đã xảy ra thời gian đó là tôi đã không nhận thấy câu hỏi rất tốt, do đó, làm cho những sai lầm, tôi nghĩ. Xin lỗi vì điều đó, và hạnh phúc vì nó đã giúp bạn: D –

+0

Vâng, nó đã giúp tôi bỏ phiếu. –

12
NSString *[email protected]"I am here."; 
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]]; 
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)]; 
[label setText:txt1]; 
1

theo này.

CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]]; 
[label setFrame:CGRectMake(x,y,stringsize.width,height)]; 
[label setText: yourString]; 
+0

phương pháp này không được chấp nhận –

2

Nếu bạn đặt phông chữ của bạn và kích thước của nó đã và nếu bạn đã khung của bạn được xác định, hãy thử sử dụng sau đây cho hai điều kiện chung:

if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines 
else [label setNumberOfLines:1]; // one line only 

// Adjust your font size to fit your desired width. 
[label setAdjustsFontSizeToFitWidth:YES]; 
+0

Giả sử bạn đang cố gắng ghi nhãn nhiều dòng thì có đây là cách tiếp cận chính xác. Đối với ghi nhãn một dòng, số lượng các dòng thiết lập là 1. –

1

Như sizeWithFont được khấu hao trong IOS 7.0 sau đó bạn mã dưới đây

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 



if (SYSTEM_VERSION_LESS_THAN(@"7.0")) { 
     // code here for iOS 5.0,6.0 and so on 
     CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]]; 
    } else { 
     // code here for iOS 7.0 
     fontSize = [itemCat_text sizeWithAttributes: 
          @{NSFontAttributeName: 
           [UIFont fontWithName:@"Helvetica" size:12]}]; 
    } 
1

Sử dụng tự động bố trí:

enter image description here

On ViewController:

override func viewDidLoad() { 
     super.viewDidLoad() 

self.sampleLabel.text = "Electrical Maintenance and Repair" 
      self.sampleLabel..sizeToFit() 

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