gpt4 book ai didi

ios - 内在内容大小在UITableView内部的UICollectionView

转载 作者:行者123 更新时间:2023-11-29 05:59:10 25 4
gpt4 key购买 nike

首先,请允许我说过去几个月来我在Google和StackOverflow上花费了100个小时来试图回答这个问题。我已经阅读了许多教程,但无法解决我的问题。每个人都很失望,令人沮丧。

期望

Expectation

现实

Reality

问题

我有一个包含UIView的UITableView。 UIView具有自动布局约束,可将其固定在单元格边缘的15pt处,然后给它阴影和圆角。在该UIView中,我有一些标签,然后是UICollectionView和堆栈视图。

我的UICollectionView的高度始终为0,我不知道如何使其具有固有尺寸。我似乎可以使其正确显示的唯一方法是,通过情节提要板中的自动布局将其强制设置为特定的高度(这就是我截取此屏幕截图的方式)。不幸的是,由于以下两个原因,强制这样的高度是不现实的:


高度根据设备的宽度而变化。由于图像是正方形,因此高度大约是设备宽度的一半(但不完全是)。
如果没有图像,则集合视图的高度应为0。


似乎确实可以在这里使用流布局的固有内容大小。

故事板

Storyboard

约束条件

每个标签,集合视图和堆栈视图之间都有大约15pt的空间(因此,垂直空间)。集合视图原型单元格中具有图像视图。图像视图的顶部,底部,尾部和前导空间到集合视图单元格都设置为0,并且比例为1:1。

集合视图布局

为了实现一张大图像和4张小图像的布局,我使用了SNCollectionViewLayout

数据源/委托

在控制器的viewDidLoad中,我将UITableView的estimatedRowHeight设置为400,并且将rowHeight设置为UITableView.automaticDimension

在tableView cellForRowAt中,我使可重用的自定义UITableViewCell类出队,在表视图单元格上设置各种出口,并在集合视图上为表视图单元格调用reloadData()。在情节提要中,我将表视图单元格设置为集合视图的数据源和委托。

在表格视图单元格的awakeFromNib函数中,我已经设置了它的拐角半径,阴影,并使用以下代码在集合视图上进行流布局(您可以在其示例中看到):

let snCollectionViewLayout = SNCollectionViewLayout()
snCollectionViewLayout.fixedDivisionCount = 4
snCollectionViewLayout.delegate = self
snCollectionViewLayout.itemSpacing = 10
collectionView.collectionViewLayout = snCollectionViewLayout


我还通过编写以下函数实现了可选的 SNCollectionViewLayoutDelegate协议:

func scaleForItem(inCollectionView collectionView: UICollectionView, withLayout layout: UICollectionViewLayout, atIndexPath indexPath: IndexPath) -> UInt {
if indexPath.row == 0 || collectionView.numberOfItems(inSection: indexPath.section) <= 2 {
return 2
} else {
return 1
}
}


这就是为什么第一张图像的高度和宽度是其余图像的两倍的原因。

研究

为了弄清楚这一点,我检查了表视图单元格的cellForRowAt和willDisplay方法内的 collectionView.collectionViewLayout.collectionViewContentSize。无论哪种情况,它都是(0,0)。

我还尝试在集合视图单元格的cellForItemAt和willDisplay中对其进行检查。除非我在集合视图中添加一个高度限制以迫使其变高,否则这些日志行甚至不会打印,但是,我没有一种好方法可以在任何时候将高度降低到应该的高度。尝试过,我得到了冲突的约束警告和真正不稳定的拉伸视图(例如完全压缩了堆栈视图)。

在测试中,我强行设置了一个足以使集合视图适合的高度限制,当这种情况发生时,它可以正确渲染并且集合视图内容的大小正确,因此我知道它能够跟踪(可以看到) here)。

有人对此有任何见识吗?如果您有任何需要研究的细节,我很乐意提供更多代码。我尝试提供完整的图片,同时将图片尽可能的短(我知道很长)。

我觉得问题与表格视图单元格内的集合视图有关。

提前致谢。

最佳答案

在表格视图单元格中保持高度约束连接。

@IBOutlet weak var collectionViewHeightConstraint: NSLayoutConstraint!


并根据高度计算以编程方式更新高度限制值

self. collectionViewHeightConstraint.constant = 100 // set it to 0 if nothing to display 

关于ios - 内在内容大小在UITableView内部的UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54858582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com