ios - boundingRectWithSize :options:context: calculate size not consider NSParagraphStyle. firstLineHeadIndent

标签 ios nsattributedstring nsparagraphstyle

例如:

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)

我们可以看到结果是一样的,所以为什么这样工作没有考虑第一行缩进???

最佳答案

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

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

The origin of the rectangle returned from this method is the first glyph origin.

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

如果您为宽度提供实际限制并使段落换行,结果将会改变。在这种情况下,第二行相对于第一行(和第一个字形)会“缩进”,因此当您更改 firstLineHeadIndent 时,边界矩形会发生变化。

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

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

关于ios - boundingRectWithSize :options:context: calculate size not consider NSParagraphStyle. firstLineHeadIndent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070894/

相关文章:

ios - 如何从 App Store 下载的 ipa 文件中获取团队 ID?

ios - UIWebview 内容不在 View 顶部

ios - 如何允许将 NSAttributedString 文本输入到 UITextView 中?

ios - UILabel:用连字符包裹和/或打破内部单词

ios - 带有图像附件和 NSTextTab 的 NSAttributedString,文本未对齐

ios - 在 UITextView 中画一条线 - NSAttributedString

ios - 将 UITextField 链接到 UITableViewCell 子类时出现问题

ios - 点击后 UitableView 改变 sectionView

ios - 带 NSAttributedString 的首字下沉

html - 在 HTML Swift 中编码字符串