使用NSHTMLTextDocumentType的项目符号间距和换行符开始位置

时间:2013-11-01 08:15:35

标签: ios cocoa ios7 nsattributedstring textkit

iOS 7来了NSHTMLTextDocumentType,我使用下面的代码来解析html并在UITextView中显示它。它完美无缺,除了有子弹点。

如何更改项目符号两侧的间距(两者之间的间距) 子弹点和UItextView左边界以及子弹点之间的空间 和右边的文字)?

另外,更重要的是。如果文本在下一行继续,我还需要它继续在相同的x位置,如子弹点文本开始的上面的行。我怎样才能做到这一点? (二线缩进)

我尝试过使用各种css,但似乎NSHTMLTextDocumentType仍然相当有限。我设法做的只是改变列表的颜色。

感谢所有帮助。

提前谢谢!

代码:

_textView.textContainer.lineBreakMode = NSLineBreakByCharWrapping;

NSString *testText = @"<p><b>This is a test with:</b></p><ul><li>test test test
test test test test test test test test test test <li>test test test test test
test <li>test test test test test <li>test test test test test test test test
test test test test <li>test test test test test test test test <li>test test
test test test test <li>test test test test test test test test test
</li></ul>";

    NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSData *htmlData = [testText dataUsingEncoding:NSUnicodeStringEncoding];

    _attributedString = [[NSMutableAttributedString alloc] initWithData:htmlData
    options:options documentAttributes:nil error:nil];

    // Paragraph style
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
    paragraphStyle.paragraphSpacing = 0;
    paragraphStyle.lineHeightMultiple = 1.0f;
    paragraphStyle.maximumLineHeight = 30.0f;
    paragraphStyle.minimumLineHeight = 20.0f;

    // Adding attributes to attributedString
    [_attributedString addAttributes:@{NSParagraphStyleAttributeName:paragraphStyle}
                              range:NSMakeRange(0,_attributedString.length)];
    [_attributedString addAttributes:@{NSFontAttributeName:font}
               range:NSMakeRange(0,_attributedString.length)];

    // Setting the attributed text
    _textView.attributedText = _attributedString;

1 个答案:

答案 0 :(得分:2)

你应该能够停止一个可变的paragraphStyle,然后设置它的缩进,如:

NSMutableParagraphStyle *const bulletParagraphStyle = [paragraphStyle mutableCopy];
bulletParagraphStyle.firstLineHeadIndent = 20;
bulletParagraphStyle.tailIndent =20;

然后将此段落样式设置为仅包含项目符号点的文本范围。

(尝试从HTML开始会有点笨拙,我想:如果你想留在那条路线上,可能会把它分成两个HTML字符串,一个子弹列表和一个用于标题,这样您就可以更轻松地设置不同的属性。)