2012-10-31 37 views
18

Làm cách nào để điều chỉnh Chiều rộng nhãn theo văn bản? Nếu chiều dài văn bản nhỏ Tôi muốn chiều rộng nhãn nhỏ ... Nếu chiều dài văn bản nhỏ Tôi muốn chiều rộng nhãn theo độ dài văn bản đó. Có thể không?iPhone - Điều chỉnh chiều rộng UILabel theo văn bản

Thực ra tôi có hai UIlabels. Tôi cần đặt hai cái này ở gần. Nhưng nếu văn bản của nhãn đầu tiên là quá nhỏ sẽ có một khoảng cách lớn. Tôi muốn loại bỏ khoảng cách này.

+0

Kiểm tra câu trả lời của tôi cho phần thứ hai phần. – iDev

+0

Thử văn bản được gán văn bản. – Vinayak

Trả lời

37
//use this for custom font 
CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@"ChaparralPro-Bold" size:40 ]].width; 

//use this for system font 
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width; 

label.frame = CGRectMake(point.x, point.y, width,height); 

//point.x, point.y -> origin for label; 
//height -> your label height; 
+0

Hoạt động tuyệt vời! Cảm ơn! – badweasel

+12

không được chấp nhận trong iOS 7.0 – santuxus

3

Hãy thử những tùy chọn,

UIFont *myFont = [UIFont boldSystemFontOfSize:15.0]; 
// Get the width of a string ... 
CGSize size = [@"Some string here" sizeWithFont:myFont]; 

// Get the width of a string when wrapping within a particular width 
NSString *mystring = @"some strings some string some strings..."; 
CGSize size = [mystring sizeWithFont:myFont 
           forWidth:150.0 
       lineBreakMode:UILineBreakModeWordWrap]; 

Bạn cũng có thể thử với [label sizeToFit]; Sử dụng phương pháp này, bạn có thể thiết lập khung của hai nhãn như,

[firstLabel sizeToFit]; 
[secondLabel sizeToFit]; 
secondLabel.frame = CGRectMake(CGRectGetMaxX(firstLabel.frame), secondLabel.origin.y, secondLabel.frame.size.width, secondLabel.frame.size.height); 
2

sizeWithFont constrainedToSize:lineBreakMode: là phương pháp ban đầu để sử dụng. Dưới đây là một ví dụ về cách sử dụng nó là dưới đây:

//Calculate the expected size based on the font and linebreak mode of your label 
CGSize maximumLabelSize = CGSizeMake(296,9999); 

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; 

//adjust the label the the new height. 
CGRect newFrame = yourLabel.frame; 
newFrame.size.height = expectedLabelSize.height; 
yourLabel.frame = newFrame; 
0

Hãy thử như sau:

/* Consider these two labels as the labels that you use, 
and that these labels have been initialized */ 

UILabel* firstLabel; 
UILabel* secondLabel; 

CGSize labelSize = [firstLabel.text sizeWithFont:[UIFont systemFontOfSize:12]]; 
//change the font size, or font as per your requirements 

CGRect firstLabelRect = firstLabel.frame; 

firstLabelRect.size.width = labelSize.width; 
//You will get the width as per the text in label 

firstLabel.frame = firstLabelRect; 


/* Now, let's change the frame for the second label */ 
CGRect secondLabelRect; 

CGFloat x = firstLabelRect.origin.x; 
CGFloat y = firstLabelRect.origin.y; 

x = x + labelSize.width + 20; //There are some changes here. 

secondLabelRect = secondLabel.frame; 
secondLabelRect.origin.x = x; 
secondLabelRect.origin.y = y; 

secondLabel.frame = secondLabelRect; 
+0

Xin lỗi ... tính năng này không hoạt động đối với tôi .. :( – Dev

+0

Bạn đang gặp phải vấn đề gì? –

+0

Tôi đã chỉnh sửa mã, xem mã đó có đang hoạt động không. –

12

Chức năng sizeWithFont: bị phản đối trong iOS 7.0, vì vậy bạn phải sử dụng sizeWithAttributes: cho iOS 7.0 +. Ngoài ra để suport phiên bản cũ, mã này dưới đây có thể được sử dụng:

CGFloat width; 
    if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0) 
    { 
     width = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0 ]].width; 
    } 
    else 
    { 
     width = ceil([text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]}].width); 
    } 

Sử dụng chức năng ceil() trên kết quả của sizeWithAttributes: được khuyến khích bởi Apple tài liệu:

"Phương pháp này trả về kích thước phân đoạn; sử dụng một kích thước trở lại kích thước khung nhìn, bạn phải tăng giá trị của nó lên số nguyên cao nhất gần nhất bằng cách sử dụng hàm ceil. "

sizeWithAttributes

+0

Điểm của việc làm theo cách cũ là gì? Tại sao không phải lúc nào cũng sử dụng sizeWithAttributes? – clocksmith

1

chỉ cần sử dụng đến nếu bạn sử dụng hạn chế trong quan điểm của bạn hoặc xib hoặc tế bào

[LBl sizeToFit]; 

nếu nó không làm việc sau đó

dispatch_async(dispatch_get_main_queue(), ^{ 
[LBl sizeToFit]; 
}); 
+0

Cập nhật giao diện người dùng trên chuỗi chính là khóa ở đây. Ngay cả khi chúng tôi không sử dụng các khối, tốt nhất là phải đảm bảo rằng tất cả các cập nhật diễn ra trong chuỗi chính. –

4
// In swift 2.0 
    let lblDescription = UILabel(frame: CGRectMake(0, 0, 200, 20)) 
    lblDescription.numberOfLines = 0 
    lblDescription.text = "Sample text to show its whatever may be" 
    lblDescription.sizeToFit() 

    // Its automatically Adjust the height 
+0

Khi đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. – SmokeDispenser

+1

@Vinayak mahadev cung cấp một số giải thích về đoạn mã – user23790

+0

Hi SmokeDispenser, Chỉ cần tạo lblDescription.sizeToFit() Tự động mở rộng Chiều cao UILabel.Chúng ta không cần tính toán gì cả. – Vinayak

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