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,
}]];