静态UITableViewCell动画中的UIPickerView关于单元格高度更新的问题

时间:2019-06-21 15:01:01

标签: ios swift uitableview

我有一个静态UITableView,其中UIPickerView中有一个UITableViewCell。触发didSelectRowAt时,应该切换具有UIPickerView的单元格的高度。我使用beginUpdates()endUpdates()来更改单元格的高度。展开时看起来不错,但折叠时UIPickerView不会动画,并且折叠速度比单元格快。不知道我在做什么错。

我已经确保将true,{{1}的ContentView)和clipToBoundsUITableViewCell的所有视图都设置为UITableViewCell。我试图将beginUpdates / endUpdates包装在UIPickerView中。我的DispatchQueue.main.async使用的是自动版式,并且(前导,尾随,顶部,底部)边缘等于单元格的“内容视图”。我在UI中使用StoryBoard。

UIPickerView

我希望动画很流畅,override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { switch (indexPath.section, indexPath.row) { case (1,1): showPicker = !showPicker tableView.beginUpdates() tableView.endUpdates() default: () } } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { switch (indexPath.section, indexPath.row) { case (1, 1): if !showDueDate { return 0 } case (1, 2): if !showPicker { return 0 } case (_, _): break } return super.tableView(tableView, heightForRowAt: indexPath) } 会和UIPickerView一起折叠。

查看gif以查看问题

via GIPHY

2 个答案:

答案 0 :(得分:0)

使用self.tableView.reloadRows(at: IndexPath(row: indexPath.row, section: indexPath.section), with: .fade)代替beginUpdates / endUpdates。设置动画表时,它将为您提供平滑的动画。

答案 1 :(得分:0)

弄清楚了。我对UIPickerView的底部约束设置为内容视图的底部,常量为0。将其更改为<= 0并对其进行了修复。不明白为什么0不起作用。至少我知道了...