根据文本的总宽度调整UILabel的大小

时间:2017-04-11 03:45:24

标签: ios swift xcode uilabel

如何根据标签文本中字体大小和字符数来预测UILabel所需的宽度。

我已经看到了一些这样做的例子,但它们都是客观的 - 不是swift 3.0。

我找到了这种方法,但它在Objective-c中,我在实现它时遇到了麻烦。

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

有什么建议吗?

4 个答案:

答案 0 :(得分:9)

如果要根据TextSize和TextLength制作UILabel的大小,请使用 的 intrinsicContentSize

以下是该示例代码:

lblDemo.frame.size = lblDemo.intrinsicContentSize

此处 lblDemo 是UILabel的IBOutlet。

答案 1 :(得分: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
}

希望,有帮助

答案 2 :(得分: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

答案 3 :(得分:0)

您希望根据输入的文字获取标签的宽度。我想你会在这里找到合适的解决方案

How to calculate UILabel width based on text length?

希望,这有帮助