【发布时间】:2020-05-31 17:12:23
【问题描述】:
当我的自定义单元格处于展开状态时,当滚动离开屏幕时,按钮被隐藏,这不应该是这种情况。在标签下方,再次向上滚动时不会出现 2 个按钮。我猜在单元格出列后需要发生一些事情。任何帮助将不胜感激。
我有一个自定义单元格,最初一行的高度为 80,单击该单元格后,它会扩展为 120。默认情况下,我将按钮隐藏如下:
@IBOutlet weak var followButton: UIButton! {
didSet {
followButton.isHidden = true
}
}
@IBOutlet weak var blockButton: UIButton! {
didSet {
blockButton.isHidden = true
}
}
我有一个var expandedIndexSet : IndexSet = [],它跟踪已扩展的单元格。
下面的方法会相应地更新 indexSet。
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
tableView.beginUpdates()
let cell = tableView.cellForRow(at: indexPath) as! StackOverflowTableViewCell
if(expandedIndexSet.contains(indexPath.row)){
expandedIndexSet.remove(indexPath.row)
} else {
expandedIndexSet.insert(indexPath.row)
}
cell.blockButton.isHidden = !cell.blockButton.isHidden
cell.followButton.isHidden = !cell.followButton.isHidden
tableView.endUpdates()
}
高度调整如下:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if expandedIndexSet.contains(indexPath.row) {
return 140
}
else {
return 80
}
}
【问题讨论】:
-
我不太确定你的用例,但
didSet { followButton.isHidden = true }对我来说似乎很不寻常。你到底想用这个 sn-p 做什么?你是从外面设置这些按钮吗?尝试将它们注释掉并使用awakeFromNib()来代替最初隐藏这些按钮。还要在func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat中添加一个断点,以检查在选择单元格后是否会调用它来刷新单元格高度。 -
用例是当用户点击 tableView 上的单元格时,单元格应该扩大高度,以便它可以显示 2 个按钮(关注/阻止)。当用户再次点击单元格时,按钮应该被隐藏并且单元格恢复到默认大小,类似于下拉菜单效果。我已经尝试删除 didSet 属性观察者并将它们移到 awakeFromNib 但仍然没有运气。
-
您是否尝试在
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat中添加断点来检查该函数是否在动画期间被调用? -
是的,我添加了一个断点来验证高度是否按预期调整。问题是当处于展开状态的选定单元格滚动过去并且在屏幕上不可见时,按钮被隐藏并影响其他单元格。
标签: ios swift uitableview tableview