似乎不可能让UILabel以我希望始终的方式遵守约束。前导和尾随空间约束似乎生效,但标签只是截断行而不是扩展到新行。
我确实numberOfLines
的{{1}}设置为0.我也尝试过此处列出的建议:UILabel not wrapping text correctly sometimes (auto layout)并且它似乎无法可靠地运行。我尝试的最后一件事是将UILabel
属性设置为setContentCompressionResistancePriority
和Fitted
,但它同时适用于Low
中的所有内容。实际上,根据tableview是否刷新,看起来所有包装都可以撤消。
我尝试的唯一似乎运作良好的是将UILabel的UITableView
设置为常量。我只是希望将它作为最后的手段来避免计算标签在运行时应该有多宽。当然,有一种开箱即用的方式来获得我想要的东西。
答案 0 :(得分:0)
您可以根据内容
计算UILabel运行时的高度func heightForLabel(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
}
答案 1 :(得分:0)
使其正常工作的关键是在应用约束并设置了所有文本后,要求视图重置布局。在我设置了所需的数据之后,我只是将这些行添加到我的自定义UITableViewCell
:
//set data
//set constraints
...
contentView.setNeedsLayout()
contentView.layoutIfNeeded()
}
我意识到这是解决方案,因为视图在受到约束影响后仍然会报告其初始帧大小而不是大小。出于某种原因,所有其他视图看起来都是正确的,但不是UILabels
。
我在答案中找到了解决方案:https://stackoverflow.com/a/13542580/1637033