ios - 迭代 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 )
}
解决方案
// 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 中有内容时才显示子视图。
推荐阅读
- c# - 无法使用 ProcessStartInfo 启动 UWP 应用
- xunit.net - 在 Xunit .net core 3.1 中维护会话值
- python - 如何从 Curses 中显示外部程序?
- javascript - 在使用 React 渲染到 DOM 之前打印组件
- firebase-authentication - 通过 GCP 身份平台将 okta 用作 IdP 时如何从 okta 获取用户数据?
- c++ - 教程中旧代码中范围解析运算符的问题
- python - 添加的类如何使用主类的属性?
- c# - 注册用户无法登录asp.net身份
- sql - SQL 中的字符串到日期
- git - Git子模块:如何知道子模块的提交/标签