我正在构建一个输出到PDF文件的大字符串,但是现在,我希望在文档中有一个2列的项目符号列表。但是,我还没有弄清楚将使我获得所需的制表效果的正确设置。
当前,我正在测试以下代码:
let mutableString = NSMutableAttributedString()
let words = ["this", "is", "really", "getting", "old"]
let paragraphStyle = NSMutableParagraphStyle()
var tabStops = [NSTextTab]()
let tabInterval: CGFloat = 250.0
for index in 0..<12 {
tabStops.append(NSTextTab(textAlignment: .left,
location: tabInterval * CGFloat(index),
options: [:]))
}
paragraphStyle.tabStops = tabStops
for index in 0..<words.count {
if index != 0 && index % 2 == 0 {
mutableString.append(NSAttributedString(string: "\n"))
}
if index % 2 == 1 {
let attributedText = NSAttributedString(string: "\t", attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
mutableString.append(attributedText)
}
let word = words[index]
let attributedString = NSMutableAttributedString(string: "\u{2022} \(word)",
attributes: [:])
mutableString.append(attributedString)
}
当我将其输入PDF生成器时,它会产生以下结果:
最终,我希望“ is”和“ getting”与文档的中心对齐,以便我可以容纳更大的单词。
答案 0 :(得分:0)
事实证明我在球场上,但绝对不在附近。
以下内容提供了所需的拆分列效果:
7/3
Stored in BigDecimals: 7/3
Converted decimal value: 2
要获得奖励积分,如果您想在文档中包含多列,请执行以下操作(请原谅我的粗格式):
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.tabStops = [
// 274 would be the midpoint of my document
NSTextTab(textAlignment: .left, location: 274, options: [:])
]
let string = "\u{2022} This\t\u{2022} is\n\u{2022} getting\t\u{2022} really\n\u{2022} old"
let attributedString = NSAttributedString(
string: string,
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]
)
看起来像这样:
这是怎么回事?
因此,我在这里了解到的是let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.tabStops = [
NSTextTab(textAlignment: .left, location: 100, options: [:]),
NSTextTab(textAlignment: .left, location: 300, options: [:])
]
let string = "\u{2022} This\t\u{2022} is\t\u{2022} getting\n\u{2022} really\t\u{2022} old"
let attributedString = NSAttributedString(
string: string,
attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle]
)
告诉iOS放置标签的行中的哪个位置:
关于制表符,如果在第一个索引中分配的位置为0的制表符,则制表符到换行符将使其与左边缘对齐。
关于什么为我解决了问题。我所依赖的方法是在遇到字符串时添加字符串的每个组成部分。但是,此字符串将无法正确格式化。相反,通过将所有内容合并为一个字符串并应用工作代码中看到的属性,我能够使其正确对齐。
我也使用问题中的单个组件进行了测试,但是还应用了段落样式属性,这也导致了可行的解决方案。
基于此,看来我的错误是混合具有和不具有所需制表符行为的字符串。