为了账号安全,请及时绑定邮箱和手机立即绑定

将UILabel高度调整为文本

将UILabel高度调整为文本

慕斯王 2019-11-11 13:06:25
我有一些标签要根据文本调整高度,这是我现在为此编写的代码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}编辑:问题不在这段代码中,所以我的解决方法是问题本身。它可能对其他人仍然有用!
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我刚把它放在操场上,对我有用。


为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)

斯威夫特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

}

//img1.sycdn.imooc.com//5dc8ec670001c35f09160319.jpg

查看完整回答
反对 回复 2019-11-11
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

如果使用的是AutoLayout,则UILabel只能通过config UI 调整高度。


对于iOS8或更高版本


为您设置约束条件领先/追踪 UILabel

并将行UILabel从1 更改为0

//img1.sycdn.imooc.com//5dc8ec750001525702050021.jpg

对于iOS7


首先,您需要添加包含高度UILabel

然后,将关系从修改Equal为Greater than or Equal

//img1.sycdn.imooc.com//5dc8ec7c0001961502550198.jpg

最后,将行UILabel从1 更改为0

//img1.sycdn.imooc.com//5dc8ec840001525702050021.jpg

您UILabel将根据文本自动增加高度



查看完整回答
反对 回复 2019-11-11
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我有很强的工作解决方案。


在layoutSubviews中:


    _title.frame = CGRect(x: 0, y: 0, width: bounds.width, height: 0)

    _title.sizeToFit()

    _title.frame.size = _title.bounds.size

在文本设置器中:


    _title.text = newValue

    setNeedsLayout()

UPD。 当然可以使用以下UILabel设置:


    _title.lineBreakMode = .ByWordWrapping

    _title.numberOfLines = 0


查看完整回答
反对 回复 2019-11-11
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信