0

我正在构建一个输出到 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”与文档的中间对齐,这样我就可以容纳更大的单词。

4

1 回答 1

0

事实证明,我在球场上,但绝对不接近。

以下提供了所需的拆分列效果:

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]
)

看起来像这样:

在此处输入图像描述

这里发生了什么?

所以,我在这里学到的是tabStops告诉 iOS 在行中的哪个位置放置选项卡:

  1. 第一个选项卡将转到位置 100
  2. 第二个标签将转到位置 300
  3. 第三个选项卡将环绕文档并转到位置 100

关于制表符,如果您在第一个索引中指定位置为 0 的制表符,则制表符到换行符将使其与左边缘对齐。

至于是什么为我解决了这个问题。我依赖于一种方法,即在遇到字符串的每个组件时添加它。但是,此字符串将无法正确格式化。相反,通过将所有内容合并到一个字符串中并应用在我的工作代码中看到的属性,我能够让它正确对齐。

我还使用我的问题中看到的各个组件进行了测试,但也应用了段落样式属性,这也产生了一个可行的解决方案。

基于此,看来我的错误是混合了具有和不具有所需的跳格行为的字符串。

于 2019-06-07T00:48:26.847 回答