【问题标题】:Calculate UICollectionView contentSize in tableView's heightForRowAtIndexPath在 tableView 的 heightForRowAtIndexPath 中计算 UICollectionView contentSize
【发布时间】:2015-04-29 06:27:01
【问题描述】:

我在 UITableViewCell 中有一个 collectionView。 collectionView 的内容是动态的,因此它的高度也是动态的,tableView 单元格的高度取决于 collectionView 的高度。 collectionView 单元格有不同的大小。 collectionView 的高度始终设置为适合其 contentSize 高度。

我的问题是 tableView 的函数 heigthForRowAtIndexPath 在创建 collectionView 之前被调用(在 cellForRowAtIndexPath 中)所以,要返回适合 collectionView 的高度,我需要手动计算它(这似乎不是一个好主意对于具有不同大小的单元格的 collectionView)。

我尝试使用自动布局来使用 UITableViewAutomaticDimension,但它不起作用(也许我用错了方式)。

让 UITableViewCell 在 heightForRowAtIndexPath 中考虑其子视图的高度的最佳方法是什么?我可以在不创建collectionView 的情况下知道它的估计大小吗?

【问题讨论】:

    标签: ios uitableview cocoa-touch uicollectionview heightforrowatindexpath


    【解决方案1】:

    使用自定尺寸,iOS 8 中提供。网上有很多很好的教程,比如这个:http://www.appcoda.com/self-sizing-cells/

    这个想法是您可以使用自动布局和viewDidLoad 中的几行代码来呈现动态适合其中内容的表格视图单元格。

    更多教程:

    【讨论】:

    • 谢谢!这很有用。我之前尝试使用这种方法解决我的问题,但我没有正确声明约束。自定尺寸单元格是一个不错的工具!
    • 太好了,很高兴它成功了。是的,自我调整大小是一项很棒的新功能。比动态计算高度更容易。
    • 如果这不起作用,您也可以在viewDidAppear 中执行reloadData
    • 是的,这是reloadData 应该解决的自我调整大小的常见问题。但是,如果这不起作用,则意味着(您是对的)数据尚未加载。您可以使用 Grand Central Dispatch 来跟踪流程和 UI。它通过在更新 UI(特别是 reloadData)之前完成加载数据的任务来工作。这里还有更多内容:thatthinginswift.com/background-threads
    • 我在之前的评论(Grand Central Dispatch)中谈到的背景线程在涉及循环的情况下特别有效。例如:您的数据加载结构有一个用于填充数组每个元素的 for 循环。这应该放在任务部分,而 reloadData() 应该放在 UI 部分。没问题!
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多