sizeWithAttributes使用新行字符返回错误的大小\ n

时间:2016-02-25 13:51:41

标签: ios objective-c nsstring

我正在使用NSString的sizeWithAttributes方法来获取NSString的动态高度。

我的字符串是@“这是地址第1行\ n这是地址第2行”

但是方法只返回line1的大小(在\ n字符之前)

有没有办法在字符串大小中包含\ n?

1 个答案:

答案 0 :(得分:2)

您无法使用sizeWithAttributes来计算多行文字的大小。想一想。多行文本的大小取决于必须绘制的宽度。sizeWithAttributes不允许您指定分配的宽度。

您需要使用boundingRectWithSize:options:attributes:context:。指定具有所需宽度和非常大的高度的尺寸。返回的值将为您提供所需的大小,以便将文本包装在指定的大小内。

其使用的一个例子是:

NSString *addressString = ... // your string to measure
NSDictionary *attributes = @{ NSFontAttributeName : [UIFont fontWithName:kFontName size:kProductFont] };
CGFloat desiredWidth = 300; // adjust accordingly
CGRect neededRect = [addressString
                        boundingRectWithSize:CGSizeMake(desiredWidth, CGFLOAT_MAX)
                        options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                        attributes:attributes context:nil];
CGFloat neededHeight = neededRect.size.height;