Ios 如何在Swift中以编程方式为UILabel指定动态高度?
我采用了使用for循环动态生成的UIlabel,每个类型的diff文本都分配在label中,我想根据文本动态地给出UIlabel的大小 在Swift中有没有简单的解决方案Ios 如何在Swift中以编程方式为UILabel指定动态高度?,ios,iphone,swift,Ios,Iphone,Swift,我采用了使用for循环动态生成的UIlabel,每个类型的diff文本都分配在label中,我想根据文本动态地给出UIlabel的大小 在Swift中有没有简单的解决方案 let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height)) label.numberOfLines = 4 label.lineBreakMode = NSLineBreakMode.ByWordWrapping let font = UIFont(n
let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height))
label.numberOfLines = 4
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
let font = UIFont(name: "Helvetica", size: 20.0)
label.font = font
label.text = "Whatever you want the text enter here"
label.sizeToFit()
如果你想根据文本内容设置numberOfLines,请给出最大行数。这在这里非常重要
let label = UILabel()
label.backgroundColor = UIColor.greenColor()
label.text = "Hello,world.\n Just a test."
let font = UIFont.systemFontOfSize(17.0)
label.font = font
label.numberOfLines = 0;
let text = label.text! as NSString
let size = text.sizeWithAttributes([NSFontAttributeName:font])
label.frame = CGRectMake(0, 0, size.width, size.height)
您可以在代码中使用自动布局 根据指定给标签的文本、字体和宽度获取标签高度:
func rectForText(text: String, font: UIFont, maxSize: CGSize) -> CGSize {
let attrString = NSAttributedString.init(string: text, attributes: [NSFontAttributeName:font])
let rect = attrString.boundingRectWithSize(maxSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)
let size = CGSizeMake(rect.size.width, rect.size.height)
return size
}
let labelSize = rectForText("your text here", font: UIFont.systemFontOfSize(your font), maxSize: CGSizeMake(your label width,999))
let labelHeight = labelSize.height //here it is!
使用此方法获取并确定字符串的大小。将最大高度和最大宽度放入
CGSize(widhth,height)
中,它将返回CGSize
包含高度和宽度的对象。根据您的场景使用它Swift 4.1扩展方法计算标签高度:
extension UILabel {
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.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
}
请参阅:创建扩展以按照返回标签高度的方法计算标签高度
import UIKit
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
let font = UIFont(name: "Helvetica", size: 20.0)
var height = heightForView("This is just a load of text", font: font, width: 60)
你在使用AutoLayout吗?是的,我在stroryBoard中使用过它,但还没有编程使用过它,我应该在“heigh”中传递什么?你可以将任何值传递到“heigh”,因为sizeToFit()函数将再次调整高度以适应内容。这对我来说非常有用!我使用了刚刚为Swift更新的相同代码3@MayPhyu我刚刚编辑了一个更新,当它通过审查时应该在这里,如果你仍然需要它!我认为这对你有帮助
NSString(string: "hello this is a string").boundingRect(
with: CGSize(width: width, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: self],
context: nil).size
extension UILabel {
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.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
}
import UIKit
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
let font = UIFont(name: "Helvetica", size: 20.0)
var height = heightForView("This is just a load of text", font: font, width: 60)