AttributedString,第一个字符大于其余字符 - >线间距问题

时间:2017-08-22 15:26:43

标签: ios swift nsattributedstring

我在属性字符串上有一个项目符号列表问题。我需要一个自定义图标,它需要比文本的其余部分更大。但是,当我改变它的字体大小时,线条的高度比其余的大,这导致了相当混乱的布局。

Formatted List Layout

我已经尝试过修改NSMutableParagraphStyle但没有太多运气。我应该尝试下一步的任何线索?感谢。

do {
    let attrStr = try NSMutableAttributedString(data:d, options:o, documentAttributes:nil)
    let stringToUpdate = attrStr.mutableString.replacingOccurrences(of: "•", with: "☞")
    attrStr.mutableString.setString(stringToUpdate)


    let regex = try! NSRegularExpression(pattern: "☞", options: [])
    let range = NSMakeRange(0, stringToUpdate.characters.count)
    let fontIcon = UIFont(name: fontName, size: fontSize + 16)! //TODO: change 

    regex.enumerateMatches(in: stringToUpdate, options: [], range: range, using: { (result, flags, stop) in

        if let subStringRange = result?.rangeAt(0) {
            attrStr.addAttribute(NSFontAttributeName, value: fontIcon , range: subStringRange)
            attrStr.addAttribute(NSBaselineOffsetAttributeName, value: -8, range: subStringRange)
        }

    })

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.addTabStop(NSTextTab(textAlignment: .left, location: 1.0, options: [:]))
    paragraphStyle.firstLineHeadIndent = 0
    paragraphStyle.headIndent = 56;
    paragraphStyle.defaultTabInterval = 2.0
    paragraphStyle.minimumLineHeight = 1
    paragraphStyle.maximumLineHeight = 1
    paragraphStyle.lineHeightMultiple = 1
    paragraphStyle.lineSpacing = 10
    paragraphStyle.paragraphSpacing = 40
    paragraphStyle.paragraphSpacingBefore = 10
    attrStr.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, stringToUpdate.characters.count))
    return attrStr
}

1 个答案:

答案 0 :(得分:0)

据我所知,你无法单独使用NSAttributedString这样做,所以...偶然选择:

1 - 根据您的图片,看起来就像使用表格视图 ,或可以使用表格视图。如果你走这条路线,在图像视图中使用“项目符号点”和标签中的文本布置单元格非常简单。

2 - 看一下这篇文章:https://stackoverflow.com/a/14639864/6257435 - 类似于你想要做的事情,除了它使用你想要使用图像的“drop-cap”。同样的想法,可能是非常相似的代码来实现图像子弹点。