gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:03:43 48 4
gpt4 key购买 nike

例如:

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/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com