Per*_*mbo 5 iphone uitableview ios swift uistackview
正如标题所示,我有一个自定义 UITableCell,其中有一些 UIStackView。每个堆栈都包含许多子视图,但我只想在第一次显示单元格时显示其中三个。如果用户想查看更多内容,可以使用 [+] 按钮调用添加剩余内容的方法。
自定义单元格高度是通过 UITableViewAutomaticDimension 确定的,它非常适合单元格的第一次显示,但是当我尝试向堆栈添加和删除子视图时,有些视图不应该被修改,它们会失去约束,而有些视图应该被修改在某些情况下,显示不会执行此操作。我想要的是显示所有 UILabels 和要更新的单元格的高度。
按下按钮 [+] 时调用的方法如下:
@objc private func changeImage(sender: UIButton) {
let index = (Int(sender.accessibilityValue!)!)
let open : Bool = openItem[index]
let plateStack : UIStackView = plateStacks[index]
let plates : [UILabel] = platesViews[index]
if !open {
sender.setImage(UIImage(named: "less")?.withRenderingMode(.alwaysTemplate), for: .normal)
let nPlatesToAdd = max(platesViews[index].count - 3, 0)
for i in 0..<nPlatesToAdd {
let plate = plates[i + 3]
plateStack.addArrangedSubview(plate)
plate.leadingAnchor.constraint(equalTo: plateStack.leadingAnchor, constant: 0).isActive = true
plate.trailingAnchor.constraint(equalTo: plateStack.trailingAnchor, constant: 0).isActive = true
}
}
else {
sender.setImage(UIImage(named: "more")?.withRenderingMode(.alwaysTemplate), for: .normal)
var i = plateStack.arrangedSubviews.count - 1
while i > 2 {
let view = plateStack.arrangedSubviews[i]
plateStack.removeArrangedSubview(view)
view.removeFromSuperview()
i = i - 1
}
}
openItem[index] = !open
}
Run Code Online (Sandbox Code Playgroud)
单元格的第一次显示(一切正常),单击 [+] 按钮后:
发生这种情况是因为 tableView 已经呈现了其布局。您可能需要检查一些原因:
fill更改影响 tableView 高度的内容后,您可以使用以下代码来更新单元格高度,而无需重新加载表格:
tableView.beginUpdates()
tableView.endUpdates()
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |