The*_*hot 102 height frame uilabel ios swift
我有一些标签,我想调整它们的高度到文本,这是我现在为此写的代码
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
Run Code Online (Sandbox Code Playgroud)
编辑:
问题不在于这段代码,所以我的问题就在于问题本身.它可能对其他人有用!
Ano*_*rak 174
我刚把它放在一个操场上,它对我有用.
针对Swift 4.0进行了更新
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: 100.0)
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
func heightForView(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
}
Run Code Online (Sandbox Code Playgroud)

Pha*_*inh 59
如果您使用的是AutoLayout,则UILabel只能通过配置UI 调整高度.
适用于iOS8或以上版本
UILabel UILabel从1 更改为0适用于iOS7
UILabel Equal到Greater than or EqualUILabel从1 更改为0您UILabel将根据文字自动增加高度
如果你愿意,我会创建这个扩展
extension UILabel {
func setSizeFont (sizeFont: CGFloat) {
self.font = UIFont(name: self.font.fontName, size: sizeFont)!
self.sizeToFit()
}
}
Run Code Online (Sandbox Code Playgroud)
我有强大的工作解决方案.
在layoutSubviews中:
_title.frame = CGRect(x: 0, y: 0, width: bounds.width, height: 0)
_title.sizeToFit()
_title.frame.size = _title.bounds.size
Run Code Online (Sandbox Code Playgroud)
在文本setter中:
_title.text = newValue
setNeedsLayout()
Run Code Online (Sandbox Code Playgroud)
UPD. 当然还有这个UILabel设置:
_title.lineBreakMode = .ByWordWrapping
_title.numberOfLines = 0
Run Code Online (Sandbox Code Playgroud)
小智 6
只需设置:
label.numberOfLines = 0
Run Code Online (Sandbox Code Playgroud)
标签会根据输入的文本量自动调整其高度.
根据Anorak的回答,我也同意Zorayr的关注,所以我添加了几行来删除UILabel并仅返回CGFloat,我不知道它是否有帮助,因为原始代码没有添加UIabel,但它不会抛出错误,所以我使用下面的代码:
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
var currHeight:CGFloat!
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
currHeight = label.frame.height
label.removeFromSuperview()
return currHeight
}
Run Code Online (Sandbox Code Playgroud)
Anorak 建议作为 UILabel 扩展中的计算属性的解决方案:
extension UILabel
{
var optimalHeight : CGFloat
{
get
{
let label = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = self.lineBreakMode
label.font = self.font
label.text = self.text
label.sizeToFit()
return label.frame.height
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
self.brandModelLabel.frame.size.height = self.brandModelLabel.optimalHeight
Run Code Online (Sandbox Code Playgroud)
在Swift 4.1和Xcode 9.4.1中
仅3步
步骤1)
//To calculate height for label based on text size and width
func heightForView(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
}
Run Code Online (Sandbox Code Playgroud)
第2步)
//Call this function
let height = heightForView(text: "This is your text", font: UIFont.systemFont(ofSize: 17), width: 300)
print(height)//Output : 41.0
Run Code Online (Sandbox Code Playgroud)
第三步
//This is your label
let proNameLbl = UILabel(frame: CGRect(x: 0, y: 20, width: 300, height: height))
proNameLbl.text = "This is your text"
proNameLbl.font = UIFont.systemFont(ofSize: 17)
proNameLbl.numberOfLines = 0
proNameLbl.lineBreakMode = .byWordWrapping
infoView.addSubview(proNameLbl)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138347 次 |
| 最近记录: |