迭代StackView,Swift

问题描述 投票:1回答:1

我有一个由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上的这种方法不熟悉。

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

for (element) in myArray {
   self.cellArray.append( elementName , elementDescription ) 
}
ios arrays swift uistackview
1个回答
0
投票
// 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中有可用内容时才显示子视图。

© www.soinside.com 2019 - 2024. All rights reserved.