gpt4 book ai didi

ios - 在自调整大小的 UITableView 中更改单元格高度

转载 作者:行者123 更新时间:2023-11-29 00:04:46 25 4
gpt4 key购买 nike

我有一个具有自动调整大小行为的 TableView ,一切都在初始加载时运行良好。每个单元格都有添加评论的规定,这些评论会显示在标题下的单元格上,并容纳单元格需要调整自身大小的评论文本。我试图调整约束并在 contentView 上调用 setNeedsLayout,但它似乎没有多大帮助,单元格也没有调整大小。如何在不重新加载 tableview 的情况下调整单元格的大小。

最佳答案

对表格 View 单元格尺寸的更改需要传达给它们的父表格 View ,以便可以更改其他单元格大小。执行此操作的最简单方法是在 beginUpdates()endUpdates() 中包装大小更改,这也会导致更改动画化。

例如,假设我有一个具有展开和折叠状态的 UITableViewCell:

final class TableViewCell: UITableViewCell {

var isExpanded: Bool = false {
didSet {
heightConstraint.constant = isExpanded ? 150 : 75
}
}

lazy var heightConstraint = self.heightAnchor.constraint(equalToConstant: 75)

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
heightConstraint.isActive = true
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

isExpanded: Bool 控制。

我可以展开或折叠我的 TableView 中所有可见的 TableViewCell,方法是:

@objc
private func toggleExpanded() {
tableView.beginUpdates()
// Finding all of the visible cells of type `TableViewCell` and changing isExpanded to not isExpanded
tableView.visibleCells.flatMap { $0 as? TableViewCell }.forEach { $0.isExpanded = !$0.isExpanded }
tableView.endUpdates()
// toggle back in 2 seconds
perform(#selector(self.toggleExpanded), with: nil, afterDelay: 2.0)
}

结果是这样的:

Screen GIF

您可以查看完整的 playground 源代码 here.

关于ios - 在自调整大小的 UITableView 中更改单元格高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com