在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
电话显然无效。
我做错了什么?
答案 0 :(得分:1)
通过将内容拥抱优先级设置为高于高度约束优先级的值,您始终可以驻留在Autolayout上。或者您可以使用以下代码计算适合的高度。
CGSize sizeThatFits = [YourString boundingRectWithSize:CGSizeMake(yourDesiredWidth,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]} context:nil].size;
编辑: 你有约束优先权。这意味着每个约束在发生冲突时都具有优先级。更高的优先级意味着它将首先得到满足。您只需要为拥抱高于正常高度限制的内容设置优先级。