NSString boundingRect与UILabel中包含的图像字形

时间:2014-10-13 20:45:14

标签: ios objective-c uilabel nsattributedstring

我正在尝试确定UILabel在使用NSAttributedString为标签约束到最大宽度时所需的合适高度。

我遇到的问题是当我在UILabel末尾包含一个小图像时高度计算已关闭。

这就是我正在做的事情。

@property (nonatomic, weak) IBOutlet UILabel *fullName;

// Append the First and Last Name
NSMutableAttributedString *fullName = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ %@", firstName, lastName] attributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:16], NSForegroundColorAttributeName : fontColor }];

// Append image
NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
textAttachment.image = [UIImage imageNamed:@"starImage"];   
NSAttributedString *attrStringWithImage = [NSAttributedString attributedStringWithAttachment:textAttachment];
[fullName appendAttributedString:attrStringWithImage];

// Set the label AttributedText
self.fullName.attributedText = fullName;

稍后我调用辅助方法来确定此fullName标签所需的高度。

- (CGFloat)heightOfLabel:(UILabel *)label withMaxWidth:(CGFloat)width {
   CGSize boundingSize = CGSizeMake(width, FLT_MAX);
   return [label.text boundingRectWithSize:boundingSize
                                   options:NSStringDrawingUsesLineFragmentOrigin
                                attributes:@{NSFontAttributeName:label.font}
                                   context:nil].size.height;
}

这就是问题所在,因为我附加的小图片没有被考虑在内。我甚至尝试了label.attributedText而不是label.text而没有结果。

有什么想法或建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

我不知道为什么boundingRectWithSize:options:attributes:context:不起作用,但是更简单的大小方法可以。这确实考虑了图像的大小。

CGSize *stringSize = fullName.size;