gpt4 book ai didi

ios - 如何通知 UICollectionView 框架更改

转载 作者:可可西里 更新时间:2023-11-01 02:28:28 27 4
gpt4 key购买 nike

问题:
当我的 UICollectionView 的框架发生变化时如何通知我,以便我可以在发生这种情况时运行一些代码?但是,我想知道这是否是解决问题的最佳方法。

问题:
我创建了自己的 UICollectionViewLayout,它需要在布置单元格之前知道 Collection View 的框架大小。问题是,当我将 Collection View 的 collectionViewLayout 属性设置为我在 viewDidLoad 中的自定义布局时, Collection View (还)没有出现在屏幕上。因此,当布局代码运行时,它为 collectionView.frame.size 获取的值是 Interface Builder 中定义的宽度和高度,当 Collection View 由于自动布局约束出现在屏幕上时,它会发生变化。这会导致自定义布局在函数 collectionViewContentSize 中返回不正确的大小。

目前的解决方案:
为解决该问题,我在 viewDidAppear 之前不更改 collectionViewLayout。这确实会导致获得正确的尺寸。但是,直到使用默认 Flow 布局显示 Collection View 后才会执行此操作,因此所有单元格都以不同的布局呈现,然后我更改布局并重新呈现单元格。虽然这几乎不会引起注意,因为它发生得太快了,但这显然不是一个好的解决方案。

更好的问题:
是否可以在 UICollectionView 框架的大小更改时收到通知?如果是这样,也许我可以在发生这种情况时设置布局,这种情况应该发生得足够快,以防止显示具有默认 Flow 布局的单元格。

如果这不可能,一个看似糟糕但稍微好一点的解决方案可能是在 viewDidAppear 中设置新布局之前不显示任何单元格。这会阻止 Flow 布局呈现,但会在短时间内显示空白 UI。

另一种选择是将 CGSize 传递给布局类,而不是仅仅访问 collectionView.frame.size,这样做我仍然可以设置在 viewDidLoad 中自定义布局并防止在 Flow 布局中显示单元格。这将需要某种方式来了解 Collection View 的大小,然后再将其呈现在屏幕上,这可能是不可能的(或者至少是不准确的)。

解决此问题的最佳方法是什么?

请注意,我不需要担心 future Collection View 大小的变化,因为布局将在边界变化时失效并重新呈现。

最佳答案

您可以尝试使用 viewDidLayoutSubviews而不是因为它在 viewDidAppear: 之前被调用,所以您有机会在那个时候获得正确的帧值。

文档注释:

However, this method being called does not indicate that the individual layouts of the view’s subviews have been adjusted.

关于ios - 如何通知 UICollectionView 框架更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854498/

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