我想计算分配给标签的属性文本的绘图矩形,以便可以根据大小更改标签框架。
分配给标签的属性文本具有自定义字体和段落信息。
我使用了boundingRectWithSize API来计算,但是这个API没有按预期工作。如何在iOS中完成这项工作?
添加用于理解的代码
self.textLabel.attributedText = [Utilities attributedStringFromText:[dbObject valueForKey:@"content"]];
//change the frame of the label according to content
CGSize maximumSize = CGSizeMake(320,9999);
CGSize textSize= [self.textLabel.attributedText boundingRectWithSize:maximumSize
options:NSStringDrawingUsesLineFragmentOrigin
context:nil].size;
答案 0 :(得分:1)
如果textLabel
使用单一字体,您可以使用(使用.UsesFontLeading
或NSStringDrawingUsesFontLeading
选项)属性提供该字体。
let size:CGSize = self.textLabel.attributedText.string.boundingRectWithSize(
CGSizeMake(self.textLabel.bounds.width, CGFloat.max),
options: (.UsesLineFragmentOrigin | .UsesFontLeading),
attributes: [NSFontAttributeName : font],
context: nil).size
将所有内容放在一起(从属性文本中获取字体) Swift :
self.textLabel.attributedText.enumerateAttribute(
NSFontAttributeName,
inRange: NSMakeRange(0, self.textLabel.attributedText.length),
options: NSAttributedStringEnumerationOptions(0)) {
(value:AnyObject!, range:NSRange, stop:UnsafeMutablePointer<ObjCBool>) -> Void in
stop.initialize(true)
if let font:UIFont = value as? UIFont {
let size:CGSize = self.textLabel.attributedText.string.boundingRectWithSize(
CGSizeMake(self.textLabel.bounds.width, CGFloat.max),
options: (.UsesLineFragmentOrigin | .UsesFontLeading),
attributes: [NSFontAttributeName : font],
context: nil).size
self.textHeight.constant = size.height // Use height
}
}
CGSize size = [self.textLabel.attributedText.string
boundingRectWithSize:CGSizeMake(self.textLabel.bounds.size.width,
CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName: font}
context:nil].size;
将所有内容放在一起(从属性文本中获取字体) Obj-C :
[self.textLabel.attributedText
enumerateAttribute:NSFontAttributeName
inRange:(NSRange){0, self.textLabel.attributedText.length}
options:(NSAttributedStringEnumerationOptions)0
usingBlock:^(id value, NSRange range, BOOL *stop) {
*stop = YES;
if( [value isKindOfClass:[UIFont class]]) {
UIFont * font = (UIFont*)value;
CGSize size = [self.textLabel.attributedText.string
boundingRectWithSize:CGSizeMake(self.textLabel.bounds.size.width,
CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName: font}
context:nil].size;
self.textHeight.constant = size.height; // USe height
}
}];