例如:
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)我们可以看到结果是一样的,所以不考虑第一线为什么会这样工作?
发布于 2014-09-27 06:03:26
您正在为传递给CGFloat.max的大小指定非常大(实际上是无限)值( -boundingRectWithSize:options: )。所以,文本永远不会被包装。它将永远排在一条长线上。
此外,-boundingRectWithSize:options:的文档显示:
此方法返回的矩形的原点是第一个字形原点。
因此,结果总是相对于第一个字形放置的位置。你基本上是在测量线的大小。缩进不会改变行的大小。它改变了第一个字形放置的位置,但是结果相对于第一个字形,所以它不会改变结果。
它将改变结果,如果你提供了一个真正的宽度限制,并使段落包装。在这种情况下,第二行相对于第一行(和第一个字形)将是“突出的”,因此边矩形将随着firstLineHeadIndent的更改而改变。
您只需自己应用所需的缩进即可。也就是说,在得到边框后,将缩进距离添加到原点的X坐标(编辑:或宽度,如果您想要一个包含缩进的rect,而不仅仅是缩进的文本)。(虽然我不清楚在“无限”的空间中缩进文本意味着什么。)
您还可以为所需的文本目的地提供实际的边界大小。
https://stackoverflow.com/questions/26070894
复制相似问题