【发布时间】:2015-06-18 07:05:22
【问题描述】:
我想利用 iOS 8 中新增的动态UITableViewCell 高度。我需要在UITableViewCell 中放置一个UICollectionView。我想确保集合视图中的所有单元格在屏幕上都是可见的,因此表格单元格的高度应该增加以适合集合视图。我几乎有这个工作。我只是无法将表格单元格设置为正确的大小 - 它的高度要么太长要么太短,并且在我与表格交互之前,一些布局问题是可见的(更多内容见下文)。
我已经为表格单元格的contentView 设置了集合视图的自动布局约束:前导、尾随、顶部和底部。然后我在集合视图上创建了一个高度约束,这样我就可以在计算出适合集合视图中所有单元格的适当高度后即时更新它的constant(因为我认为没有办法自动执行此操作)。
这是其余的设置。
viewDidLoad {
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 44
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let cellDimension = self.collectionView.frame.size.width / 7 //always 7 columns
let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
flowLayout.itemSize = CGSizeMake(cellDimension, cellDimension)
self.collectionViewHeightConstraint.constant = cellDimension * 4 //always 4 rows
}
我还没有实现heightForRowAtIndexPath。
此设置会导致垂直约束冲突。我已经尝试降低约束的优先级并更改一堆组合中的关系,但没有一个导致所需的行为。如果我将高度约束的优先级降低到 999,表格视图单元格起初太高,但在我上下滚动表格视图后,表格单元格高度更新到预期高度。使用其他一些组合,根据优先级和我已应用于约束的关系。此外,在视图动画时,集合视图单元格未以正确的大小显示(但它们在动画完成时已正确调整),或者如果我重新加载表格,则集合视图单元格的大小不正确,直到我滚动桌子。
如何解决这些外观问题以获得动态表格视图单元格高度,其中包含一个完全可见的集合视图,该集合视图具有基于显示器宽度的动态单元格大小?
【问题讨论】:
-
我建议将 rowHeight 设置“self.tableView.rowHeight =”从 ViewDidLoad 移动到 ViewWillAppear,您可能还想检查这个问题。 link
-
@KevinHorgan 这没有任何明显的区别。
-
为了使自动布局在 UITableViewCell 中正常工作,您需要为 containerView 中的所有布局添加约束而不会丢失。否则自动布局将无法正常工作。查看以下链接,其中提供了自动布局设置的一些详细信息对于 tableviewcell stackoverflow.com/questions/29231390/…
-
@Ram 约束都已定义,从集合视图到 contentView 的顶部底部前导尾随。
-
AFAICS 的答案比这里提到的任何人都复杂。查看stackoverflow.com/questions/24126708/…
标签: ios uitableview swift autolayout uicollectionview