在表格视图单元格的标签中显示项目符号 swift ios

show bullets in label on tableview cell swift ios

我有一个 table 视图,在 table 视图中我有多个单元格,如附图所示。 我想展示便利设施项目,例如:空调、游泳池、健身房、电视电缆等。

我怎样才能做到这一点

我的模型中的所有这些值都来自 API 响应。

          let ac = "Air Conditioning"
          let tv = "TV Cable"
          let washing = "Washing Machine"
          let connectivity = "Wi-Fi"
          let gym = "Gym"

堆栈视图的好案例...

  • 垂直UIStackView
  • 每个“行”都是水平 UIStackView分布:均匀填充

看起来像这样 - 显示边界矩形:

没有边界矩形:

查看层次结构:


编辑

第二种方法(您可能会发现它更容易)...

在每个“边”上使用带有单个标签的单个水平堆栈视图并使用 .attributedText

将每个标签的 .attributedText 设置为带项目符号的格式化属性字符串。

单元格原型可能如下所示:

然后,使用此代码(从 稍作修改)生成带项目符号的格式化属性字符串:

func add(bulletList strings: [String],
         font: UIFont,
         indentation: CGFloat = 15,
         lineSpacing: CGFloat = 3,
         paragraphSpacing: CGFloat = 10,
         textColor: UIColor = .black,
         bulletColor: UIColor = .red) -> NSAttributedString {
    
    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
    }
    
    let bulletPoint = "\u{2022}"
    let textAttributes: [NSAttributedString.Key: Any] = [.font: font, .foregroundColor: textColor]
    let bulletAttributes: [NSAttributedString.Key: Any] = [.font: font, .foregroundColor: bulletColor]
    let buffer = NSMutableAttributedString.init()
    
    for string in strings {
        var formattedString = "\(bulletPoint)\t\(string)"

        // don't add newLine if it's the last bullet
        if string != strings.last {
            formattedString += "\n"
        }

        let attributedString = NSMutableAttributedString(string: formattedString)
        let paragraphStyle = createParagraphAttirbute()
        
        attributedString.addAttributes(
            [NSAttributedString.Key.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(bulletAttributes, range: rangeForBullet)
        buffer.append(attributedString)
    }
    
    return buffer
}

使用您的图像作为示例数据的快速实现结果如下: