我的单元格子类中有UILabel,它应该有一个标题。标题的大小可以是各种长度,因此我需要调整 UILabel 的大小以适应文本并防止文本不长,我还需要能够设置 maxHeight。宽度应相同。如何在 tableViewCell 子类中以 swift 创建这样的代码?
到目前为止,我在清醒的Nib中有这个
theTitleLabel?.font = UIFont(name: "HelveticaNeue", size: 13)
theTitleLabel?.textColor = UIColor(rgba: "#4F4E4F")
theTitleLabel?.numberOfLines = 0
theTitleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail
CGSize maximumLabelSize = CGSizeMake(MAX_WIDTH, MAX_HEIGHT);
CGSize expectedSize = [lbl sizeThatFits:maximumLabelSize];
CGSize s = CGSizeMake(STATIC_WIDTH, expectedSize.height);
yourLabel.frame = CGRectMake(yourLabel.frame.origin.x, nameLbl.frame.origin.y, s.width, s.height);
最简单的方法是使用自动布局约束。您正在使用awakeFromNib
,因此我假设您在界面生成器(xib 或情节提要文件)中的某个位置有该单元格。
如果可以避免这种情况,切勿在代码中设置视图。在界面生成器中执行此操作要容易得多。
-
在界面生成器中找到您的标签并设置其属性(字体、颜色、换行模式等)。
-
添加宽度约束(或左右边距约束,具体取决于所需内容)。
-
添加高度约束,将其关系从
= (equals)
更改为< (less than)
。
您已完成,不需要任何代码。
Swift 2 版本,来自 Zigglzworth 的答案:
let maximumLabelSize = CGSizeMake(maxWidth, maxHeight);
let expectedSize = theLabel.sizeThatFits(maximumLabelSize)
theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedSize.width, expectedSize.height)
let lblMassage = UILable()
lblMassage.text ="Resizing the height of UILabel to fit text.................."
lblMassage.numberOfLines = 0
lblMassage.lineBreakMode = NSLineBreakMode.byTruncatingTail
lblMassage.preferredMaxLayoutWidth = 190
lblMassage.sizeToFit()