我有一个由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周期的项,但是我对Cell内部StackView上的这种方法不熟悉。

这是我对单元格所做的事情(一系列具有1个名称和1个描述的单元格):
for (element) in myArray {
   self.cellArray.append( elementName , elementDescription )
}

最佳答案

// 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中有可用内容时才显示子视图。

关于ios - 迭代StackView,Swift,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61245635/

10-12 07:38