【问题标题】:How to get accurate height of label if it contains a NSAttributed String with parts of string in BOLD如果标签包含带有部分字符串的 NSAttributedString 粗体,如何获得准确的标签高度
【发布时间】:2011-11-09 23:57:30
【问题描述】:
我目前正在使用以下方法来获取所需的标签高度
+ (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint
{
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
return size.height;
}
这在大多数情况下都有效,但是,有些字符串混合了粗体和非粗体文本,这可能会影响极端情况下所需的确切高度。
例如
有什么方法可以得到含有这种混合物的标签的准确高度?
【问题讨论】:
标签:
objective-c
ios
height
uilabel
nsattributedstring
【解决方案1】:
方法如下
UILabel *labelWithAtributedText = ...
CGSize size = [labelWithAtributedText sizeThatFits:CGSizeMake(maxWidth, CGFLOAT_MAX)];
【解决方案2】:
我也在为此苦苦挣扎。这里有几个想法:
使用 boldSystemFontOfSize 计算高度,因为它可以提供最大空间(在大多数情况下,这是最差的。有些标签会比需要的高一点,但我发现它比被切断了。)
计算 systemFontOfSize 和 boldSystemFontOfSize 之间的平均值
+ (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint
{
CGSize size1 = [文本 sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
CGSize size2 = [文本 sizeWithFont:[UIFont boldSystemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
返回 (size1.height+size2.height)/2;
}
如果您不需要实际高度,请使用 [label sizeToFit] 但我假设您需要这个高度 :)