如何为我的UILabel使用preferredMaxLayoutWidth自动并找出其视图的高度?

时间:2015-03-01 08:27:30

标签: ios objective-c uitableview cocoa-touch ios8

在iOS 8中,你似乎可以将UILabel设置为自动的preferredMaxLayoutWidth,它只是通过自动布局来计算出来。但是,我似乎无法弄清楚如何计算标签所在视图的高度。基本上我有一个多行UILabel固定在UIView的两侧,我想知道UIView的高度。 (在这种情况下,它是一个单元格。)

如果我写:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    var cell = tableView.dequeueReusableCellWithIdentifier("MyCell") as! MyTableViewCell
    cell.label1.text = "some sample text to test it out, and it resolves to two lines long"
    let height = cell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height

    return height + 1.0 // Extra 1.0 is for separator height
}

如果UILabel只有一行,那么单元格的高度总是如此。我将numberOfLines设置为0,因此它应该为多行性质返回更高的数字。 systemLayoutFittingSize电话显然无效。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

通过将内容拥抱优先级设置为高于高度约束优先级的值,您始终可以驻留在Autolayout上。或者您可以使用以下代码计算适合的高度。

CGSize sizeThatFits = [YourString boundingRectWithSize:CGSizeMake(yourDesiredWidth,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]} context:nil].size;

编辑: 你有约束优先权。这意味着每个约束在发生冲突时都具有优先级。更高的优先级意味着它将首先得到满足。您只需要为拥抱高于正常高度限制的内容设置优先级。

enter image description here