ios - 使用自动布局更新 Collection View 高度以适合 TableView 单元格中的所有单元格

原文 标签 ios uitableview swift autolayout uicollectionview

我想利用iOS 8中新增的动态UITableViewCell高度。我需要在UICollectionView中放置一个UITableViewCell。我想确保集合 View 中的所有单元格在屏幕上都可见,因此表格单元格的高度应增加以适合集合 View 。我几乎可以完成这项工作。我只是无法使表格单元格的大小正确-高度太长或太短,在我与表格进行交互之前,一些布局问题是可见的(更多内容请参见下文)。

我已经为表格单元格的contentView的集合 View 设置了自动布局约束:前导,尾随,顶部和底部。然后,我在集合 View 上创建了一个高度约束,以便在计算出适合集合 View 中所有单元格的适当高度后,可以动态更新其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,则表 View 单元格最初太高,但是在我上下滚动表 View 后,表单元格的高度将更新为预期的高度。使用其他某些组合,结果是表单元格太短而整个收集 View 流血,表单元格太短而收集 View 被切断,或者表单元格太高(基于优先级和优先级)。我已将约束应用于约束。此外,在为 View 设置动画时,收集 View 单元格不会以适当的大小显示(但动画结束时会对其进行适当调整),或者如果我重新加载表格,则在滚动之前,收集 View 单元格的大小是不正确的 table 。

如何解决这些外观问题,以获得动态表格 View 单元格高度,该高度包含一个完全可见的集合 View ,该 View 具有基于显示器宽度的动态单元格大小?

最佳答案

从我从您了解的设置collectionView单元格和大小的代码中可以看出,在我看来,您希望具有正方形的集合单元格,并有4行7个单元格,并且所有这些单元格都是完全可见的。

如果将约束添加到单元格中所有4个边距(顶部,底部,左侧和右侧)的约束,然后将7:4的宽高比约束添加到collectionView,则tableview应该能够自动计算单元格高度为您选择合适的尺寸。

关于ios - 使用自动布局更新 Collection View 高度以适合 TableView 单元格中的所有单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29597395/

相关文章:

javascript - iOS 上的 IFrame 高度问题(移动 Safari)

iphone - 开始录制时的提示音

ios - 单击按钮展开 tableview 单元格

ios - Arduino/Swift - BLE 通信 POST & GET

swift - 如何强制将旧版本的iOS应用替换为AppStore上可用的新版本

ios - UINavigationBar 在横向中被裁剪

ios - UIGraphicsGetCurrentContext()返回nil-现在怎么办?

ios - 在iOS 7中禁用Core Data中的iCloud(又名将永久存储文件迁移到本地)

c# - 你怎么能在 Xamarin.iOS UITableView 上只圆两个角?

ios - Swift代码中的SVPullToRefresh + SVInfiniteScrolling