[英]How to make UIView match size of UILabel
我有一个应用了自动布局的 UILabel,并且更改了其 preferredWidth 以确保其格式正确。 我希望 UIView 位于它的“下方”并与标签的大小相匹配。 将 UIView 的 frame.size 设置为 label.frame.size 不起作用,因为它不考虑正在发生的自动布局。
我认为必须有一种方法来匹配 UILabel 的约束,然后在此之后调整大小。 但是我认为这行不通,因为 UILabel 的格式与单独的 UIView 无关。
注意:文本在运行时已知,因为它依赖于来自 Web 服务器的信息。
相关代码:
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let cell = tableView!.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as MessageTableViewCell
cell.messageLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.messageLabel.numberOfLines = 0
cell.messageLabel.preferredMaxLayoutWidth = cell.frame.size.width - 35
preferredWidth = cell.messageLabel.preferredMaxLayoutWidth
cell.messageLabel.text = friends[indexPath!.row]
cell.messageLabel.sizeToFit()
cell.messageLabel.setNeedsDisplay()
//cell.msgBubble.frame.size.width = preferredWidth
//cell.msgBubble.
cell.msgBubble.layer.masksToBounds = true
cell.msgBubble.layer.cornerRadius = 10.0
return cell
// Configure the cell...
}
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var sampleLabel = UILabel()
sampleLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
sampleLabel.numberOfLines = 0
sampleLabel.preferredMaxLayoutWidth = preferredWidth
sampleLabel.text = friends[indexPath!.row]
sampleLabel.sizeToFit()
sampleLabel.setNeedsDisplay()
return sampleLabel.intrinsicContentSize().height + 10
}
我假设您已为标签添加了足够的约束。 现在我们需要为视图添加约束以根据标签调整大小。
选择标签和视图,您可以在 Xcode 的侧栏中进行。 (cmd + 鼠标点击)
然后添加约束。 您可以输入任何您喜欢的值。 如果收到警告,您可以更新框架或更新约束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.