我有一个由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/