我有一个UITableViewCell
子类,我正在使用自动布局,并且我希望在自动布局过程完成后获得UILabel
子视图的高度。
我尝试了layoutSubviews
并获得了frame
的{{1}}属性,但这似乎是标签在被回收之前的旧高度。
然后我试图覆盖UILabel
,但我发现它从未被调用过。
完成自动布局并应用约束后,如何获取layoutIfNeeded
子视图的帧?当然这应该很简单!
答案 0 :(得分:0)
假设标签是表格单元格内容视图的直接子视图,那么我的问题是您可以在layoutSubviews
方法中访问标签边界的最终屏幕上的内容视图值。表格单元格(而不是表格单元格本身的layoutSubviews
方法)。
但是,如果您的标签不是多行的,那么只需在attributedText
属性中随时抓取标签的高度,如下所示:
NSAttributedString *attrString = label.attributedText;
CGFloat labelHeight = ceilf(attrString.size.height);
或者,您可以使用标签的font
属性来确定标签的高度(同样,仅当标签不是多行标签时):
UIFont *font = label.font;
CGFloat labelHeight = ceilf(font.lineHeight);
如果您的标签是多线的,那么计算线高的最佳选择如下:
// but you have to know the label's width
CGFloat labelWidth = …
NSAttributedString *attrString = label.attributedText;
CGRect rect = [attrString boundingRectWithSize:CGSizeMake(labelWidth, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
CGFloat labelHeight = ceilf(rect.size.height);
您可以手动计算标签的宽度。通常它是主视图的边界宽度减去水平间距边距的固定量。