标记列表仅使用属性字符串

问题描述 投票:0回答:1

我正在尝试使用NSAttributedString而不是完整的UICollectionView来模仿下面的屏幕截图。

enter image description here

我几乎在那里,但我不能得到白线间距和换行权:enter image description here

这是我的代码:

let attributedText = myList.reduce(into: NSMutableAttributedString()) { result, next in
    let text = NSMutableAttributedString(string: "   ")
    text.append(NSMutableAttributedString(string: next))
    text.append(NSMutableAttributedString(string: "   "))
    text.addAttributes(
        [
            .font: UIFont.systemFont(ofSize: 12),
            .foregroundColor: UIColor.darkGrey,
            .backgroundColor: UIColor.lightGray
        ],
        range: NSRange(location: 0, length: text.length)
    )

    result.append(text)

    guard myList.last != next else { return }
    result.append(NSMutableAttributedString(string: "  "))
}

attributedText.addAttributes(
    [
        .paragraphStyle: NSMutableParagraphStyle().with {
            $0.alignment = .center
            $0.lineHeightMultiple = 2
            $0.lineSpacing = 12
        }
    ],
    range: NSRange(location: 0, length: attributedText.length)
)

attributedText.append(NSMutableAttributedString(string: "\n"))

myLabel.attributedText = attributedText

是否有可以处理此问题的属性使其看起来像第一个屏幕截图?

ios uilabel nsattributedstring
1个回答
0
投票

这是我在“膳食”位置快速手动修复的答案。您可能不需要它取决于您的标签布局。

let attributedText = myList.reduce(into: NSMutableAttributedString()) { result, next in



        let whitespace = NSMutableAttributedString(string: "   ")
        whitespace.addAttributes(
            [
                .font: UIFont.systemFont(ofSize: 12),
                .foregroundColor: UIColor.darkGray,
                .backgroundColor: UIColor.white
            ],
            range: NSRange(location: 0, length: whitespace.length)
        )


        let text = NSMutableAttributedString(string:  next)

        text.addAttributes(
            [
                .font: UIFont.systemFont(ofSize: 12),
                .foregroundColor: UIColor.darkGray,
                .backgroundColor: UIColor.lightGray
            ],
            range: NSRange(location: 0, length: text.length)
        )


        result.append(whitespace)
        if(next.hasPrefix("Meal")){
             result.append(whitespace)

        }
        result.append(text)
           result.append(whitespace)
        guard myList.last != next else { return }
        result.append(NSMutableAttributedString(string: "  "))
    }

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.