繁体   English   中英

如何使 UIView 匹配 UILabel 的大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM