例如:
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)
这是输出:
(0.0,0.0,87.276,16.702)
(0.0,0.0,87.276,16.702)
我们可以看到结果是一样的,所以第一线不被认为是为什么它的工作方式如此???
答案 0 :(得分:3)
您要为您传递给CGFloat.max
的尺寸指定非常大(实际上是无限的)值(-boundingRectWithSize:options:
)。所以,文本永远不会包装。它将始终排成一行。
此外,-boundingRectWithSize:options:
的文档说:
从此方法返回的矩形的原点是第一个字形原点。
因此,结果总是相对于放置第一个字形的位置。你基本上测量了线的大小。缩进不会改变行的大小。它会改变放置第一个字形的位置,但结果是相对于第一个字形,因此它不会改变结果。
如果您提供宽度的实际限制并使段落换行,则会更改结果。在这种情况下,第二行将是"缩进"相对于第一行(和第一个字形),因此当您更改firstLineHeadIndent
时,边界矩形会发生变化。
您可以自己简单地应用所需的缩进。也就是说,在获得边界矩形后,将缩进距离添加到原点的X坐标(编辑:或宽度,如果您想要包含缩进的矩形而不仅仅是文本位置通过缩进)。 (虽然我不清楚在"无限空间中缩进文本是什么意思。)
您还可以为文本的所需目的地提供实际的边界大小。