2015-07-29 2 views
4

Я хочу, чтобы высота UILabel расширялась в зависимости от ее текста.Xcode - Swift - высота UILabel для текста

Вот что контроллер представления выглядит, с ярлыком, выбранным:

enter image description here

Вот код (я пробовал кучу разных подобных вещей, но это то, что я прямо сейчас) :

import UIKit 

class ViewControllerTEST: UIViewController { 

@IBOutlet weak var label: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 


    label.frame = CGRectMake(0, 0, CGRectGetWidth(label.bounds), 0) 
    label.numberOfLines = 0 
    label.lineBreakMode = .ByWordWrapping 
    label.text = "This is a really\nlong string" 
    label.setNeedsLayout() 
    label.sizeToFit() 
    label.frame = CGRectMake(0, 0, CGRectGetWidth(label.bounds), CGRectGetHeight(label.bounds)) 



} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 

И, как вы можете видеть здесь, он не работает по назначению:

enter image description here

+0

Старайтесь не положить \ п в строке и посмотреть, если он будет обернуть автоматически. – Aderis

+0

Проверьте это также http://stackoverflow.com/a/37186766/1732743 –

ответ

6

Не используйте рамку, используйте автозапуск. Добавьте верхнюю, ведущую и конечную привязку к метке (я бы предложил сделать это в раскадровке). Если у вас есть lines, равный 0 (что вы делаете), высота будет автоматически изменяться. Если вы хотите добавить ограничения в коде, ваш viewDidLoad будет выглядеть примерно так:

override func viewDidLoad() { 
    super.viewDidLoad() 
    label.text = "This is a really\nlong string" 
    label.setTranslatesAutoresizingMaskIntoConstraints(false) 
    view.addSubview(label) 
    let views = ["label": label] 
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-[label]-|", options: nil, metrics: nil, views: views)) 
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-[label]", options: nil, metrics: nil, views: views)) 
} 
Смежные вопросы