如何根据UILabel的字体大小和文本中的字符数预测所需的宽度。
我看过一些这样的示例,但它们都是使用Objective-C而不是Swift 3.0编写的。
我找到了这个方法,但它是用Objective-C编写的,我在实现时遇到了一些问题。
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:17.0f]].width;
有什么建议吗?
如何根据UILabel的字体大小和文本中的字符数预测所需的宽度。
我看过一些这样的示例,但它们都是使用Objective-C而不是Swift 3.0编写的。
我找到了这个方法,但它是用Objective-C编写的,我在实现时遇到了一些问题。
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:17.0f]].width;
如果想要根据文本大小和长度调整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
}
您可以将设置标签文本值的字符串转换为 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