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
中有几个函数可以给出字符串长度,但如果它在一行中,那就是长度。
有没有办法知道最后的 attributedText
在 textRect
中需要多少行?
使用NSAttributedString.boundingRect(with:options:context:)
计算所需的大小。您应该将 .usesLineFragmentOrigin
作为选项传递,以便它计算多行。传递你想要的宽度;高度并不重要,因为它会扩展高度以包含完整的字符串,您可以使用它来计算最终的矩形。
也就是说,根据您的描述,听起来您可以将高度设置得非常大(10,000 是通常的值;但也许您只想为三行留出空间)。因为你只是在这里画画;可用的矩形是否比要求的高并不重要。仅当它更短时才重要。
我正在使用此方法在 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
中有几个函数可以给出字符串长度,但如果它在一行中,那就是长度。
有没有办法知道最后的 attributedText
在 textRect
中需要多少行?
使用NSAttributedString.boundingRect(with:options:context:)
计算所需的大小。您应该将 .usesLineFragmentOrigin
作为选项传递,以便它计算多行。传递你想要的宽度;高度并不重要,因为它会扩展高度以包含完整的字符串,您可以使用它来计算最终的矩形。
也就是说,根据您的描述,听起来您可以将高度设置得非常大(10,000 是通常的值;但也许您只想为三行留出空间)。因为你只是在这里画画;可用的矩形是否比要求的高并不重要。仅当它更短时才重要。