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

4

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

我看过一些这样的示例,但它们都是使用Objective-C而不是Swift 3.0编写的。

我找到了这个方法,但它是用Objective-C编写的,我在实现时遇到了一些问题。

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

有什么建议吗?

我认为这里已经有答案了。https://dev59.com/MHA75IYBdhLWcg3wAD_x 希望能帮到你。 - Arpit Jain
4个回答

12

如果想要根据文本大小和长度调整UILabel的大小,则可以使用intrinsicContentSize

以下是示例代码:

lblDemo.frame.size = lblDemo.intrinsicContentSize

这里的lblDemo是一个UILabel的IBOutlet。


它能正常工作,但我需要它像这样:lblDemo.widthAnchor.constraint(equalToConstant: 30+lblDemo.intrinsicContentSize.width).isActive = true我使用了30个标签本身的宽度。 - Umut ADALI

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
}

希望它有所帮助。

0

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接