首页 > 解决方案 > 迭代 StackView,Swift

问题描述

我有一个由 3 StackView 组成的自定义单元格。他们每个人都有一个标题,一个描述和一个图像,水平。我必须用一个数组填充这个单元格,它最多可以由 3 个元素组成,但它可以有 2 个或 1 个。所以在我的 viewModel 中,我像这样对待这个数组......

let firstItem = myArray[0]
let secondItem = myArray[1]
let thirdItem = myArray[2]

然后我用......填充字段firstItem.name firstItem.description......对于它们中的每一个(我猜不是最好的方法)然后我做了一些检查索引是否存在,如果它不存在我删除StackView,我手动设置了一些约束并且我适合单元格到内容(如果我有 2 个元素,则单元格更短,如果我有 3 个元素,则单元格更大)。

这是我检查索引 3 不存在后的一段代码:

self.stackView.removeFromSuperview()
self.ownConstraints.constant = value (20 for example)

我的问题是,实现这一目标的最佳方法是什么?对于单元格,我通常一个接一个地为项目附加一个 for 循环,但我不熟悉单元格内 StackView 上的这种方法。

这就是我对 cell 所做的(一系列具有 1 个名称和 1 个描述的单元格):

for (element) in myArray {
   self.cellArray.append( elementName , elementDescription ) 
}

标签: iosarraysswiftuistackview

解决方案


// hide all items in stackView
    stackView.arrangedSubviews.forEach({ $0.isHidden = true })

    // add or update arrangedSubviews
    for (index, element) in myArray.enumerated() {
        if index >= stackView.arrangedSubviews.count - 1 {
            stackView.addArrangedSubview(UILabel())
        }
        (stackView.arrangedSubviews[index] as? UILabel)?.text = element
        stackView.arrangedSubviews[index].isHidden = false
    }

我会隐藏 stackView 中的所有子视图,并且仅在您的 viewModel 中有内容时才显示子视图。


推荐阅读