3

例如:

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)

我们可以看到结果是一样的,所以没有考虑 firstlineindent 为什么它会这样工作???

4

1 回答 1

4

CGFloat.max您正在为要传递的大小指定非常大(实际上是无限)的值 ( ) -boundingRectWithSize:options:。所以,文本永远不会换行。它总是排成一排。

此外,文档-boundingRectWithSize:options:说:

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

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

如果您为宽度提供真正的限制并使段落换行,它将改变结果。在这种情况下,第二行将相对于第一行(和第一个字形)“缩进”,因此边界矩形会随着您更改firstLineHeadIndent.

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

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

于 2014-09-27T06:03:26.780 回答