我正在尝试使用NSAttributedString
而不是完整的UICollectionView
来模仿下面的屏幕截图。
这是我的代码:
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
是否有可以处理此问题的属性使其看起来像第一个屏幕截图?
这是我在“膳食”位置快速手动修复的答案。您可能不需要它取决于您的标签布局。
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: " "))
}