如何根据标签文本中字体大小和字符数来预测UILabel所需的宽度。
我已经看到了一些这样做的例子,但它们都是客观的 - 不是swift 3.0。
我找到了这种方法,但它在Objective-c中,我在实现它时遇到了麻烦。
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:17.0f]].width;
有什么建议吗?
答案 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)