Ios 为什么不是';我的标签藏起来了吗?
我有一个带stackView的tableViewCell。我想把它变成一个可折叠的细胞。我可以在tableView:cellForRowAt: 但是,如果我改变隐藏状态以响应单元格的点击,则屏幕上的可见性不会改变Ios 为什么不是';我的标签藏起来了吗?,ios,uistackview,Ios,Uistackview,我有一个带stackView的tableViewCell。我想把它变成一个可折叠的细胞。我可以在tableView:cellForRowAt: 但是,如果我改变隐藏状态以响应单元格的点击,则屏幕上的可见性不会改变 UIView.animate(withDuration: 0.25) { [unowned self] in self.disclaimers.isHidden = !cellItem.isExpanded } cellItem.isExpanded属性与label.isHi
UIView.animate(withDuration: 0.25) { [unowned self] in
self.disclaimers.isHidden = !cellItem.isExpanded
}
cellItem.isExpanded属性与label.isHidden属性一样正确切换。只是屏幕上没有变化
我知道这已经在主线程上,因为在主线程上调用了tableView:didSelectRowAt:。但是为了掩饰自己,我尝试用DispatchQueue.main.async{}调用而不是UIView.animate来包装这行。没有变化
有什么想法吗
如果您愿意,完整项目在这里:
问题在DisclaidersCell.swift中。第33行夫妇问题
除了在cellForRowAt
中之外,您不应该在任何地方调用.dequeueReusableCell
。您可以在TableViewController.swift
->didSelectRowAt
。。。这将创建单元格的新实例,而不是表中的现有实例。将guard
行更改为:
guard var cellItem = helper.cellForRowAtIndexPath(indexPath) as? TableViewExpandableCellItem
, let cell = tableView.cellForRow(at: indexPath) as? TableViewExpandableCell
, cellItem.shouldExpand
else { return }
这样,tableView.cellForRow(at:indexPath)
将返回现有单元格
接下来,设置.ishiden
的动画将不会提供所需的动画
在免责声明cell.swift
->切换扩展()
,更改:
UIView.animate(withDuration: 0.25) { [unowned self] in
self.disclaimers.isHidden = !cellItem.isExpanded
}
简单地说:
self.disclaimers.isHidden = !cellItem.isExpanded
然后,在TableViewController中选择Rowat
功能:
cellItem.isExpanded = !cellItem.isExpanded
cell.toggleExpansion(tableViewCellItem: cellItem)
tableView.beginUpdates()
tableView.endUpdates()
这将告诉单元格隐藏/显示标签,并将.beginUpdate()
与endUpdates()
配对将触发重新计算表中的行高,并设置重画动画