我有一个包含三个UICollectionViews
的堆栈视图,设置为每个都等于垂直空间。该堆栈视图设置为显示器一半的高度,因此它在较大的设备上使用更多空间。这已在Interface Builder中设置。
因此,我需要在运行时设置UICollectionView
的单元格大小,因为在我们运行之前,我不知道单元格的实际大小。我希望它们是方形的,所以我只想考虑UICollectionView
的高度,减去顶部和底部的插图,并将itemSize
设置为结果大小。
我尝试在viewDidLayoutSubviews
中执行此操作,因为那时我认为已经设置了集合视图的初始高度。但是,它们似乎设置为1000x1000(即使它们在故事板中的大小更合理),因此我根据集合视图高度1000计算单元格大小。这太大了,但我认为我和#39;再次被召唤并再次获得重新计算机会。我这样做,但在UICollectionView
大声抱怨itemSize
不正确之前(即太大而不适合collectionView
,现在有了#34;正确"}大小。)
在没有来自UICollectionView
的警告的情况下,找到我正在寻找的行为的最佳方法是什么?在运行时根据UICollectionView
的最终大小设置集合视图项目大小是我过去一直在努力解决的问题,并且似乎永远不会出现"对"是时候设置itemSize
了。我不想动态地返回它,只是因为它不是在程序的生命周期中发生变化的东西。在最初布置视图时似乎会出现一些不一致的情况。
我认为集合视图的初始大小为1000.0×1000.0似乎很奇怪,但我不确定如何或为什么要修复它 - 也许它与嵌入到堆栈中有关查看?
编辑添加:几乎可以肯定UIStackView
导致布局问题。我创建了一个虚拟项目来测试UICollectionView
的大小,当它是UIStackView
中嵌入的顶级视图时。如果未嵌入,则在调用viewDidLayoutSubviews
时,其大小已正确以适合其superview
的边界。但是,如果它位于UIStackView
内,则它将保持默认大小1000x1000。
目前,我正在通过在viewDidLayoutSubviews
中添加以下代码解决此问题:
if collectionView.bounds.size.width > view.bounds.size.width { view.layoutIfNeeded() }
collectionView
位于UIStackView
内,view
是UIViewController
的主视图。这允许基于视图大小的所有后续计算都是正确的,并且如果UIStackView
行为得到修复,则希望不会被调用。
类似的讨论here和here。有趣的是,在XCode8中,新的默认设置是不保存XIB文件中的视图大小,而是将所有内容放入初始大小为1000x1000,以便在第一次布局过程中解析。我估计除了UIStackView
以外。
答案 0 :(得分:0)
您有sizeForItemAtIndexPath()
返回itemSize
吗?我发现实现该函数是在运行时动态调整UICollectionViewCell
的唯一可靠方法。