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