【发布时间】:2020-02-26 02:19:04
【问题描述】:
我有一个UITableView,其中包含许多单元格。在下面的示例中,这两行中的每一个都包含一个 UICollectionView,它正在管理标签。初始加载工作正常,tableView 根据 UICollectionView 高度正确调整行大小。
在viewDidLoad方法中,我为tableView设置了如下配置:
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = UITableView.automaticDimension
然后,在viewDidAppear 方法中,我要求更新tableView,如下所示:
override func viewDidAppear(_ animated: Bool) {
tableView.beginUpdates()
tableView.endUpdates()
}
问题 1: 这种工作,除了它动画 tableView 行高的增加。有没有办法只在初始加载时解决这个问题?
第二个问题是,如果用户与内容交互并删除其中一个,即使 collectionView 调整大小,它更新的内容大小也不会触发 tableView 行更新其高度,可以看出在下面的屏幕截图中:
这可能是因为它位于 tableView cell 内,因为通常情况下,collectionView 会自动调整大小。当collectionView 在tableView 之外时,请参阅下面的屏幕截图。
如果我滚动 tableView,该行将作为双端队列/重用过程的一部分正确调整大小。见下文:
我认为问题的一部分是collectionView 在tableViewCell 内时的布局约束是它被固定在tableViewCell 的边缘,但除非我这样做,否则它不会无法正确显示所以迷路了...
问题 2: 如何修复 tableView 行高根据其内容的更改调整大小?
【问题讨论】:
-
通常您将
tableView.estimatedRowHeight设置为估计的高度。大多数情况下,该值无关紧要。尝试 44 到 88(或其他)之间的值。只是不要使用UITableView.automaticDimension。至于何时更新集合视图,您需要在您的集合视图上实现一个自定义委托,您的表视图控制器可以订阅该委托。当该委托方法触发您的表格视图控制器时,您可以为相应的表格视图单元格调用tableView.reloadRows。试一试,告诉我们进展如何。
标签: ios swift uitableview uicollectionview