我正在尝试获取一个属性字符串的rect,但是boundingRectWithSize调用没有考虑到我传入的大小,并且返回一个单行高度的rect,而不是一个很大的高度(它是一个很长的字符串)。我在下面的代码中尝试了传入一个非常大的高度值和0,但返回的rect总是相同的。
CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
options:NSStringDrawingUsesDeviceMetrics
context:nil];
这是不是坏了,或者我需要做一些其他的事情来让它返回一个包装文本的rect?
发布于 2013-03-14 09:48:30
看起来你没有提供正确的选项。对于包装标签,至少要提供:
CGRect paragraphRect =
[attributedText boundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
context:nil];
注意:如果原始文本宽度小于300。f将不会有换行,因此请确保装订大小正确,否则仍然会得到错误的结果。
发布于 2014-12-04 16:25:37
由于某些原因,boundingRectWithSize总是返回错误的大小。我想出了一个解决方案。有一个用于UItextView -sizeThatFits的方法,它返回文本集的适当大小。因此,不使用boundingRectWithSize,而是创建一个具有随机帧的UITextView,并使用相应的宽度和CGFLOAT_MAX高度调用其sizeThatFits。它返回具有适当高度的大小。
UITextView *view=[[UITextView alloc] initWithFrame:CGRectMake(0, 0, width, 10)];
view.text=text;
CGSize size=[view sizeThatFits:CGSizeMake(width, CGFLOAT_MAX)];
height=size.height;
如果你在while循环中计算大小,不要忘了在自动释放池中添加,因为将有n个UITextView创建,如果我们不使用自动释放池,应用程序的运行时内存将增加。
发布于 2015-09-28 14:31:44
我在这些建议中没有任何一个是幸运的。我的字符串包含unicode项目符号,我怀疑它们会在计算中造成麻烦。我注意到UITextView可以很好地处理绘图,所以我希望利用它的计算。我做了以下工作,这可能没有NSString绘图方法那么理想,但至少它是准确的。与仅仅为了调用-sizeThatFits:
而初始化UITextView相比,它也稍微更优化一些。
NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:CGSizeMake(width, CGFLOAT_MAX)];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
[layoutManager addTextContainer:textContainer];
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:formattedString];
[textStorage addLayoutManager:layoutManager];
const CGFloat formattedStringHeight = ceilf([layoutManager usedRectForTextContainer:textContainer].size.height);
https://stackoverflow.com/questions/13621084
复制相似问题