首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSAttributedString的boundingRectWithSize返回错误的大小

NSAttributedString的boundingRectWithSize返回错误的大小
EN

Stack Overflow用户
提问于 2012-11-29 15:48:50
回答 23查看 130.3K关注 0票数 158

我正在尝试获取一个属性字符串的rect,但是boundingRectWithSize调用没有考虑到我传入的大小,并且返回一个单行高度的rect,而不是一个很大的高度(它是一个很长的字符串)。我在下面的代码中尝试了传入一个非常大的高度值和0,但返回的rect总是相同的。

代码语言:javascript
运行
复制
CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
  options:NSStringDrawingUsesDeviceMetrics
  context:nil];

这是不是坏了,或者我需要做一些其他的事情来让它返回一个包装文本的rect?

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2013-03-14 09:48:30

看起来你没有提供正确的选项。对于包装标签,至少要提供:

代码语言:javascript
运行
复制
CGRect paragraphRect =
  [attributedText boundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)
  options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
  context:nil];

注意:如果原始文本宽度小于300。f将不会有换行,因此请确保装订大小正确,否则仍然会得到错误的结果。

票数 322
EN

Stack Overflow用户

发布于 2014-12-04 16:25:37

由于某些原因,boundingRectWithSize总是返回错误的大小。我想出了一个解决方案。有一个用于UItextView -sizeThatFits的方法,它返回文本集的适当大小。因此,不使用boundingRectWithSize,而是创建一个具有随机帧的UITextView,并使用相应的宽度和CGFLOAT_MAX高度调用其sizeThatFits。它返回具有适当高度的大小。

代码语言:javascript
运行
复制
   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创建,如果我们不使用自动释放池,应用程序的运行时内存将增加。

票数 51
EN

Stack Overflow用户

发布于 2013-06-15 05:09:37

Ed McManus无疑提供了一个使其发挥作用的关键。我发现了一个不起作用的案例

代码语言:javascript
运行
复制
UIFont *font = ...
UIColor *color = ...
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                     font, NSFontAttributeName,
                                     color, NSForegroundColorAttributeName,
                                     nil];

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString: someString attributes:attributesDictionary];

[string appendAttributedString: [[NSAttributedString alloc] initWithString: anotherString];

CGRect rect = [string boundingRectWithSize:constraint options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];

矩形将不具有正确的高度。请注意,anotherString (附加到字符串)是在没有属性字典的情况下初始化的。这是anotherString的合法初始值设定项,但在这种情况下,boundingRectWithSize:不会给出准确的大小。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13621084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档