首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boundingRectWithSize:options:context:计算大小不考虑NSParagraphStyle.firstLineHeadIndent

boundingRectWithSize:options:context:计算大小不考虑NSParagraphStyle.firstLineHeadIndent
EN

Stack Overflow用户
提问于 2014-09-27 03:07:03
回答 1查看 935关注 0票数 3

例如:

代码语言:javascript
复制
import Foundation
import UIKit

var str = NSString(string: "saldkjaskldjhf")

var font = UIFont.systemFontOfSize(14.0)
var attributes:[String:AnyObject]   = [NSFontAttributeName: font]
var attriStrWithoutParagraph = NSAttributedString(string: str, attributes: attributes)

var size = attriStrWithoutParagraph.boundingRectWithSize(CGSize(width: CGFloat.max, height: CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)

var paragraphstyle = NSMutableParagraphStyle()
paragraphstyle.firstLineHeadIndent = CGFloat(20)
attributes[NSParagraphStyleAttributeName] = paragraphstyle
attriStrWithoutParagraph = NSAttributedString(string: str, attributes: attributes)
size = attriStrWithoutParagraph.boundingRectWithSize(CGSize(width: CGFloat.max, height: CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)

这是输出:

代码语言:javascript
复制
(0.0,0.0,87.276,16.702)
(0.0,0.0,87.276,16.702)

我们可以看到结果是一样的,所以不考虑第一线为什么会这样工作?

EN

回答 1

Stack Overflow用户

发布于 2014-09-27 06:03:26

您正在为传递给CGFloat.max的大小指定非常大(实际上是无限)值( -boundingRectWithSize:options: )。所以,文本永远不会被包装。它将永远排在一条长线上。

此外,-boundingRectWithSize:options:的文档显示:

此方法返回的矩形的原点是第一个字形原点。

因此,结果总是相对于第一个字形放置的位置。你基本上是在测量线的大小。缩进不会改变行的大小。它改变了第一个字形放置的位置,但是结果相对于第一个字形,所以它不会改变结果。

它将改变结果,如果你提供了一个真正的宽度限制,并使段落包装。在这种情况下,第二行相对于第一行(和第一个字形)将是“突出的”,因此边矩形将随着firstLineHeadIndent的更改而改变。

您只需自己应用所需的缩进即可。也就是说,在得到边框后,将缩进距离添加到原点的X坐标(编辑:或宽度,如果您想要一个包含缩进的rect,而不仅仅是缩进的文本)。(虽然我不清楚在“无限”的空间中缩进文本意味着什么。)

您还可以为所需的文本目的地提供实际的边界大小。

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

https://stackoverflow.com/questions/26070894

复制
相关文章

相似问题

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