Ios NSAttributedString项目符号列表问题

Ios NSAttributedString项目符号列表问题,ios,swift,uitextview,nsattributedstring,Ios,Swift,Uitextview,Nsattributedstring,我正在尝试使用NSAttributedString和UITextView创建项目符号列表。以下是我迄今为止所取得的成就: 正如人们所看到的,两条线之间有一个小的“转变”。下面是我用来构建属性字符串的代码片段: func add(bulletList strings: [String], indentation: CGFloat = 15, lineSpacing: CGFloat = 3, paragraphSpacing: CGFloat

我正在尝试使用
NSAttributedString
UITextView
创建项目符号列表。以下是我迄今为止所取得的成就:

正如人们所看到的,两条线之间有一个小的“转变”。下面是我用来构建属性字符串的代码片段:

func add(bulletList strings: [String],
         indentation: CGFloat = 15,
         lineSpacing: CGFloat = 3,
         paragraphSpacing: CGFloat = 10) {

    func createParagraphAttirbute() -> NSParagraphStyle {
        var paragraphStyle: NSMutableParagraphStyle
        let nonOptions = NSDictionary() as! [NSTextTab.OptionKey: Any]

        paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
        paragraphStyle.tabStops = [
            NSTextTab(textAlignment: .left, location: indentation, options: nonOptions)]
        paragraphStyle.defaultTabInterval = indentation
        paragraphStyle.firstLineHeadIndent = 0
        paragraphStyle.lineSpacing = lineSpacing
        paragraphStyle.paragraphSpacing = paragraphSpacing
        paragraphStyle.headIndent = indentation
        return paragraphStyle
    }

    var buffer = NSMutableAttributedString.init()

    for string in strings {
        let formattedString = "\u{2022} \(string)\n"
        let attributedString = NSMutableAttributedString(string: formattedString)
        let paragraphStyle = createParagraphAttirbute()

        attributedString.addAttributes(
            [NSAttributedStringKey.paragraphStyle : paragraphStyle],
            range: NSMakeRange(0, attributedString.length))

        attributedString.addAttributes(
            textAttributes,
            range: NSMakeRange(0, attributedString.length))

        let string:NSString = NSString(string: formattedString)
        let rangeForBullet:NSRange = string.range(of: bulletPoint)
        attributedString.addAttributes(bulletAttirbutes, range: rangeForBullet)
        buffer.append(attributedString)
    }
}
您是否认为所选段落参数有问题?因为代码几乎实现了预期的功能,排除了这个差距

更新1 按照@4kman的建议,我更改了提供的代码,如下所示:

paragraphStyle.firstLineHeadIndent = indentation
但现在我把所有的线都对齐了,包括要点:

更新2
好的,解决方案很简单——用tab替换空格。请参阅下面的更新代码。

@4kman@Krunal,感谢您的回复!解决方案甚至更简单。在
let formattedString=“\u{2022}\(string)\n
中将空格符号替换为
\t
,可获得有效的缩进

为完整起见,完整的解决方案代码为(仅替换一个字符):


下面是一个简单的Objective-C代码片段,主要基于公认的答案:

NSString* text = 
            "•\tSome text for bullet 1.\n"
            "•\tSome text for bullet 2.\n"
            "•\tSome text for bullet 3."

UIFont* bodyFont = [UIFont preferredFontForTextStyle: UIFontTextStyleBody];
CGFloat indentSize = bodyFont.pointSize;
NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle alloc] init];
paraStyle.alignment = NSTextAlignmentLeft;
paraStyle.tabStops = @[ [[[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentLeft location:indentSize options:@{}] ];
paraStyle.defaultTabInterval = indentSize;
paraStyle.headIndent = indentSize;
paraStyle.firstLineHeadIndent = 0;
paraStyle.lineHeightMultiple = 0.85;
paraStyle.lineSpacing = 0;
paraStyle.paragraphSpacing = bodyFont.lineHeight * 0.25;
paraStyle.paragraphSpacingBefore = 0;
[atrStr appendAttributedString:
 [[[NSMutableAttributedString alloc] initWithString:avc.message attributes:@{
      NSParagraphStyleAttributeName:paraStyle,
      NSFontAttributeName: bodyFont,
  }]];

请在此处提供
texttributes、bulletPoint、BulletAttributes的值,因为我在尝试代码时发现这些值无效/未知。这样我就可以查看/测试完整的代码。@Krunal感谢您的响应,已经找到了解决方案。Pl.请在此处提供完整的工作代码,添加我在注释中提到的缺失信息,以使此答案更有效非常有用。@Krunal抱歉,代码片段是从类中提取的。现在它应该可以作为一个独立的函数工作。它告诉我
缓冲区
只丢失了。你能不能也添加关于缓冲区的信息。我想这是一个字符串数组,对吗?@Krunal啊,还有很多缺少的变量和颜色。现在应该可以了。我们如何删除该项目符号列表
NSString* text = 
            "•\tSome text for bullet 1.\n"
            "•\tSome text for bullet 2.\n"
            "•\tSome text for bullet 3."

UIFont* bodyFont = [UIFont preferredFontForTextStyle: UIFontTextStyleBody];
CGFloat indentSize = bodyFont.pointSize;
NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle alloc] init];
paraStyle.alignment = NSTextAlignmentLeft;
paraStyle.tabStops = @[ [[[NSTextTab alloc] initWithTextAlignment:NSTextAlignmentLeft location:indentSize options:@{}] ];
paraStyle.defaultTabInterval = indentSize;
paraStyle.headIndent = indentSize;
paraStyle.firstLineHeadIndent = 0;
paraStyle.lineHeightMultiple = 0.85;
paraStyle.lineSpacing = 0;
paraStyle.paragraphSpacing = bodyFont.lineHeight * 0.25;
paraStyle.paragraphSpacingBefore = 0;
[atrStr appendAttributedString:
 [[[NSMutableAttributedString alloc] initWithString:avc.message attributes:@{
      NSParagraphStyleAttributeName:paraStyle,
      NSFontAttributeName: bodyFont,
  }]];