gpt4 book ai didi

ios - 在运行时设置 UICollectionViewCellSize

转载 作者:搜寻专家 更新时间:2023-10-31 21:47:22 25 4
gpt4 key购买 nike

我有一个包含三个 UICollectionViews 的堆栈 View ,设置为为每个 View 提供相等的垂直空间。该堆栈 View 设置为显示器一半的高度,以便它在更大的设备上使用更多空间。这已在 Interface Builder 中设置。

因此,我需要在运行时设置 UICollectionView 的单元格大小,因为在我们运行之前,我不知道单元格的实际大小是多少。我希望它们是方形的,所以我只想考虑 UICollectionView 的高度,减去顶部和底部的插图,并将 itemSize 设置为结果大小。

我尝试在 viewDidLayoutSubviews 中执行此操作,因为那时我认为 Collection View 的初始高度已经设置。但是,它们似乎设置为 1000x1000(即使它们在 Storyboard 中的尺寸更合理),因此我根据 1000 的 Collection View 高度计算单元格大小。这太大了,但我认为我会再次被调用,并有机会重新计算它。我这样做了,但不是在 UICollectionView 大声提示 itemSize 不正确(即太大而无法放入 collectionView 之前,它现在有“正确”的尺寸。)

在没有来自 UICollectionView 的警告的情况下获得我正在寻找的行为的最佳方法是什么?根据 UICollectionView 的最终大小在运行时设置 Collection View 项目大小是我过去一直在努力解决的问题,而且似乎从来没有“正确”的时间来设置 >项目大小。我不想动态地返回它,只是因为它在程序的生命周期中不会发生变化。最初布局 View 时似乎出现了一些不一致。

Collection View 的初始大小为 1000.0 x 1000.0,这对我来说似乎很奇怪,但我不确定如何或为什么要解决这个问题 - 也许它与嵌入堆栈 View 有关?

编辑添加:几乎可以肯定是 UIStackView 导致了布局问题。我创建了一个虚拟项目来测试 UICollectionView 的大小,当它是顶级 View 与嵌入在 UIStackView 中时。如果它不是嵌入的,当 viewDidLayoutSubviews 被调用时,它已经被适本地调整大小以适应它的 superview 的边界。但是,如果它位于 UIStackView 内,它会保持默认大小 1000x1000。

目前,我正在通过在 viewDidLayoutSubviews 中添加以下代码来解决这个问题:

    if collectionView.bounds.size.width > view.bounds.size.width {
view.layoutIfNeeded()
}

collectionView 位于 UIStackView 内,viewUIViewController 的主视图。这允许所有基于 View 大小的后续计算都是正确的,并且希望在 UIStackView 行为得到修复时不会被调用。

类似的讨论 herehere 。有趣的是,在 XCode8 中,新的默认设置是不在 XIB 文件中保存 View 的大小,而是将所有内容都以 1000x1000 的初始大小引入,以便在第一次布局过程中解决。我猜 UIStackView 除外。

最佳答案

您是否让 sizeForItemAtIndexPath() 返回 itemSize?我发现实现该函数是在运行时动态调整 UICollectionViewCell 大小的唯一可靠方法。

关于ios - 在运行时设置 UICollectionViewCellSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780035/

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