如何使UIVabel的UIView匹配大小

时间:2014-07-20 03:08:52

标签: ios swift 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

}

1 个答案:

答案 0 :(得分:1)

我假设您为标签添加了足够的约束。现在我们需要为视图添加约束以根据标签调整大小。

选择标签和视图,您可以在Xcode的侧栏中进行。 (cmd +鼠标点击)

enter image description here

然后添加约束。您可以输入您喜欢的任何值。如果收到警告,您可以更新框架或更新约束。

enter image description here

修改

我做了这个project,这是你要找的吗?