2015-07-05 23 views
10

Tôi đã tạo nhãn UI được tạo động bằng cách sử dụng vòng lặp, mỗi loại văn bản khác được gán trong nhãn, tôi muốn cung cấp kích thước nhãn UI tùy thuộc vào văn bảnlàm thế nào để cung cấp chiều cao động cho UIlabel lập trình nhanh chóng?

Có giải pháp dễ dàng để làm điều đó nhanh không?

+0

Bạn có đang sử dụng tính năng Tự động trả lời không? – Bannings

+0

Có, tôi đã sử dụng nó trong stroryBoard, Nhưng không có sử dụng nó programatically nào, – sss

Trả lời

5
let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height)) 
label.numberOfLines = 4 
label.lineBreakMode = NSLineBreakMode.ByWordWrapping 
let font = UIFont(name: "Helvetica", size: 20.0) 
label.font = font 
label.text = "Whatever you want the text enter here" 
label.sizeToFit() 

Nếu bạn muốn đặt numberOfLines theo nội dung văn bản, hãy cung cấp đường truyền tối đa của bạn.Điều này rất quan trọng ở đây.

+0

những gì tôi nên vượt qua trong "heigh"? – sss

+1

Bạn có thể chuyển bất kỳ giá trị nào cho "chiều cao" vì hàm sizeToFit() sẽ lại điều chỉnh chiều cao cho vừa với nội dung. –

1
let label = UILabel() 
label.backgroundColor = UIColor.greenColor() 
label.text = "Hello,world.\n Just a test." 
let font = UIFont.systemFontOfSize(17.0) 
label.font = font 
label.numberOfLines = 0; 
let text = label.text! as NSString 
let size = text.sizeWithAttributes([NSFontAttributeName:font]) 
label.frame = CGRectMake(0, 0, size.width, size.height) 

Bạn có thể sử dụng Bố cục tự động trong mã. See Auto Layout Guide

3

có được một chiều cao nhãn tùy thuộc vào đó là văn bản, phông chữ, và chiều rộng bạn gán cho nó:

func rectForText(text: String, font: UIFont, maxSize: CGSize) -> CGSize { 
     let attrString = NSAttributedString.init(string: text, attributes: [NSFontAttributeName:font]) 
     let rect = attrString.boundingRectWithSize(maxSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil) 
     let size = CGSizeMake(rect.size.width, rect.size.height) 
     return size 
    } 

let labelSize = rectForText("your text here", font: UIFont.systemFontOfSize(your font), maxSize: CGSizeMake(your label width,999)) 
let labelHeight = labelSize.height //here it is! 
+0

Điều này làm việc tuyệt vời cho tôi! Tôi đã sử dụng cùng một mã chỉ được cập nhật cho Swift 3 – Simon

+0

Tôi có thể nhận được 3 mã nhanh cho bro @Simon này không? –

+0

@May Phyu Tôi chỉ chỉnh sửa nó với một bản cập nhật, nên ở đây khi nó đi qua đánh giá, nếu bạn vẫn cần nó! –

3
myLabel.text = "Your Label Text Here" 

    myLabel.textAlignment = .Natural 

    myLabel.numberOfLines = 0 

    myLabel.sizeToFit() 

    myLabel.frame = CGRectMake(myLabel.frame.origin.x, myLabel.frame.origin.y, 280, myLabel.frame.height) 
1
let label:UILabel = UILabel() 

             label.textColor=UIColor.black 
             label.font = UIFont(name: "Halvetica", size: 17) 
             label.numberOfLines = 1 

             label.text = item.name 
             label.sizeToFit() 

             label.frame = CGRect(x: 5, y: imageView.frame.height+10, width: 50, height:label.frame.height) 
+0

tôi nghĩ nó hữu ích cho bạn – user8969659

0
NSString(string: "hello this is a string").boundingRect(
     with: CGSize(width: width, height: .greatestFiniteMagnitude), 
     options: .usesLineFragmentOrigin, 
     attributes: [.font: self], 
     context: nil).size 

Sử dụng phương pháp này để có được xác định kích thước cho bạn chuỗi . Đặt chiều cao tối đa và chiều rộng tối đa trong CGSize(widhth,height) và nó sẽ trả về đối tượng có độ cao và chiều rộng CGSize. Sử dụng nó theo kịch bản của bạn

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