swift 在UITableViewCell中以动态方式并排添加多个标签(视图)

zpqajqem  于 2023-02-18  发布在  Swift
关注(0)|答案(1)|浏览(212)

我想用编程的方法把按钮并排放在一个单元格中,然后添加操作,但是首先我想看看UIClabel是怎么工作的。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let array = ["house", "bugs", "perl"] //comes from API
    
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! DetailViewCell
    
    var hStackView = UIStackView()
    var vStackView = UIStackView()
    vStackView.axis = .vertical
    vStackView.spacing = 8
    vStackView.alignment = .top
    
    var count: Int = 0
    for ar in array {
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 21)) //CGRectZero)
        label.text = ar
        label.textColor = .black
        
        if count % 2 == 0  {
            hStackView = UIStackView()
            hStackView.axis = .horizontal
            hStackView.spacing = 8
            hStackView.alignment = .fill
            hStackView.distribution = .fill
            hStackView.addArrangedSubview(label)
            if (count + 1) == array.count {
                vStackView.addArrangedSubview(hStackView)
            }
        }
        else {
            hStackView.addArrangedSubview(label)
            vStackView.addArrangedSubview(hStackView)
        }
        count += 1
    }
    cell.addSubview(vStackView)
    cell.layoutIfNeeded()
    return cell
}
f87krz0w

f87krz0w1#

您看不到任何内容是因为垂直UISstackView不知道应将其放置在单元格中的什么位置以及它应该有多大。您可以使用布局约束来做到这一点:

vStackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    cell.leadingAnchor.constraint(equalTo: vStackView.leadingAnchor),
    cell.trailingAnchor.constraint(equalTo: vStackView.trailingAnchor),
    cell.topAnchor.constraint(equalTo: vStackView.topAnchor),
    cell.bottomAnchor.constraint(equalTo: vStackView.bottomAnchor)
])

第一行告诉它使用约束进行布局,NSLayoutConstraints.activate告诉它如何将vStackView边界绑定到单元格视图边界,在这种情况下,vStackView现在应该占据单元格提供的整个空间。

相关问题