2015-07-05 4 views
10

Я взял UILabel, которые генерируются динамически, используя цикл, каждый тип заплату текст назначения в ярлыке, я хочу дать размер UILabel динамически в зависимости от текстаКак сделать динамическую высоту для UIlabel программно в быстрой?

Есть ли простое решение, чтобы сделать это в стриже?

+0

Вы используете AutoLayout? – Bannings

+0

Да, я использую его в stroryBoard, но не использую его программно, – sss

ответ

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() 

Если вы хотите установить numberOfLines в соответствии с содержанием текста, укажите максимальные линии. Это очень важно здесь.

+0

Что мне передать в «heigh»? – sss

+1

Вы можете передать любое значение «height», так как функция sizeToFit() снова отрегулирует высоту для соответствия содержимому. –

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) 

Вы можете использовать автоматический макет в коде. See Auto Layout Guide

3

получить высоту этикетки в зависимости от его текста, шрифт и ширину вы назначаете ему:

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

Это отлично подойдет для меня! Я использовал тот же самый код, который только что обновлен для Swift 3 – Simon

+0

Могу ли я получить быстрый код для этого брокера @Simon? –

+0

@May Phyu Я только что отредактировал его с обновлением, должен быть здесь, когда он проходит обзор, если вам все еще нужно! –

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

Я считаю его полезным для вас – user8969659

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

Используйте этот метод, чтобы получить определить размер для вас строки , Установите максимальную высоту и максимальную ширину в CGSize(widhth,height), и она вернет CGSize объект, содержащий высоту и ширину. Используйте его в соответствии со своим сценарием

Смежные вопросы