NSAttributedString 绘图 - 多少行?

NSAttributedString Drawing - How Many Lines?

我正在使用此方法在 PDF 中绘制文本:

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = .center
        paragraphStyle.lineBreakMode = .byWordWrapping

        let textAttributes = [
            NSAttributedString.Key.paragraphStyle: paragraphStyle,
            NSAttributedString.Key.font: UIFont(name: "MySpecialFont", size: 16)!,
            NSAttributedString.Key.foregroundColor: UIColor.black
        ]

        let attributedText = NSAttributedString(
            string: myTextArray.first,
            attributes: textAttributes
        )

        let textRect = CGRect(
            x: 400,
            y: 40,
            width: 80,
            height: 40
        )

        attributedText.draw(in: textRect)

上面的文字绘制得很好。然而,有时,传递给它的字符串似乎太长了,并且持续了 3 行而不是 2 行。在这些情况下,我希望 textRect 更高。基本上知道需要多少行才能调整 textRect

NSAttributedString 中有几个函数可以给出字符串长度,但如果它在一行中,那就是长度。

有没有办法知道最后的 attributedTexttextRect 中需要多少行?

使用NSAttributedString.boundingRect(with:options:context:)计算所需的大小。您应该将 .usesLineFragmentOrigin 作为选项传递,以便它计算多行。传递你想要的宽度;高度并不重要,因为它会扩展高度以包含完整的字符串,您可以使用它来计算最终的矩形。

也就是说,根据您的描述,听起来您可以将高度设置得非常大(10,000 是通常的值;但也许您只想为三行留出空间)。因为你只是在这里画画;可用的矩形是否比要求的高并不重要。仅当它更短时才重要。