[英]UITableViewCell get subview height with auto-layout
我有一个使用自动布局的UITableViewCell
子类,一旦完成自动布局过程,我想获取UILabel
子视图的高度。
我尝试了layoutSubviews
并获取了UILabel
的frame
属性,但这似乎是标签被回收之前的旧高度。
然后,我尝试覆盖layoutIfNeeded
但是我发现它从未被调用过。
自动布局完成并应用约束后,如何获取UITableViewCell
子视图的框架? 当然,这应该很简单!
假设标签是表格单元格内容视图的直接子视图,那么我的问题是,您可以在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);
您将手动计算标签的宽度。 通常,它是主视图的边界宽度减去水平间距的固定值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.