2017-04-11 85 views
2

我将如何去预测基于UILabel的字体大小和标签文本中字符数量的所需宽度。基于文本总宽度调整UILabels的尺寸

我已经看到了一些这样做的例子,但它们都在objective-c中,而不是3.0。

我发现这个方法,但它在objective-c中,我在实现它时遇到了麻烦。

CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:17.0f]].width; 

有什么建议吗?

+0

我认为这是在这里找到答案。 http://stackoverflow.com/questions/3527494/how-to-calculate-uilabel-width-based-on-text-length希望它有助于 –

回答

4

如果想使基于TEXTSIZE和正文长度的UILabel的大小,然后用 intrinsicContentSize

下面是该样本的代码:

lblDemo.frame.size = lblDemo.intrinsicContentSize 

这里lblDemo是的UILabel的IBOutlet中。

0

您可以将要设置标签文本值的字符串强制转换为NSString

guard let labelText = label.text else { return }  
let castString = labelText as NSString 
let size: CGSize = castString.size(attributes: [NSFontAttributeName : UIFont.systemFontSize]) 

//you now can use size.width to apply to a desired view 
1
override func viewDidLoad() { 
    super.viewDidLoad() 
    let screenSize = UIScreen.main.bounds 
    let screenWidth = screenSize.width 
    let text = "Size To Fit Tutorial" 
    let font : UIFont! 
    switch UIDevice.current.userInterfaceIdiom { 
    case .pad: 
    font = UIFont(name: "Helvetica", size: 35) 
    case .phone: 
    font = UIFont(name: "Helvetica", size: 50) 
    default: 
    font = UIFont(name: "Helvetica", size: 24) 
} 
    let yourHeight = heightForLabel(text: text, font: font, width: 
    screenWidth) 

    let yourLabel : UILabel = UILabel(Frame : CGRect(x:0 ,y:0 
    ,width:screenWidth ,height:yourHeight)) 
    yourLabel.backgroundColor = UIColor.black 
    self.view.addSubviews(yourLabel) 

} 


//Self Sizing height .... 
func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat{ 
    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: 
    width, height: CGFloat.greatestFiniteMagnitude)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.byCharWrapping 
    label.font = font 
    label.text = text 
    label.sizeToFit() 
    return label.frame.height 
} 

希望,它有助于