Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 根据文本的总宽度调整UILabel的大小_Ios_Swift_Xcode_Uilabel - Fatal编程技术网

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

Ios 根据文本的总宽度调整UILabel的大小,ios,swift,xcode,uilabel,Ios,Swift,Xcode,Uilabel,如何根据UILabel的字体大小和标签文本中的字符数来预测它所需的宽度 我已经看到了一些这样做的例子,但是它们都在objective-c中,而不是swift 3.0中 我找到了这个方法,但它在objective-c中,我在实现它时遇到了困难 CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:17.0f]].width; 有什么建议吗?您可以将要设置标签文本值的字符串转换为typeNSString guard l

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

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

我找到了这个方法,但它在objective-c中,我在实现它时遇到了困难

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

有什么建议吗?

您可以将要设置标签文本值的字符串转换为type
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

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

下面是这方面的示例代码:

lblDemo.frame.size = lblDemo.intrinsicContentSize

这里lblDemo是UILabel的IBOutlet。

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

希望有帮助

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
}

希望,它会有所帮助

我想这里已经回答了这个问题。希望,它能帮助我工作,但我需要它:lblDemo.widthAnchor.constraint(equalToConstant:30+lblDemo.intrinsicContentSize.width)。isActive=true我又使用了30个标签自己的宽度。