HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 防止在UICollectionView中“包装”项目大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一个UICollectionView来显示一个网格,该网格在宽度和高度上都可能比可见框架大,同时保持行和列的完整性.认的UICollectionViewFlowLayout允许部分在屏幕外滚动,但它包装一个部分内的项目以使它们全部保持在屏幕上,从而搞砸了我的网格.

认识到UICollectionView是UIScrollView的子类,我尝试在viewDidLoad中手动设置集合视图的内容大小属性

self.collectionView.contentSize = CGSizeMake((columns * (cellWidth + itemSpacingX),(rows * (cellHeight + itemSpacingY));

但这没有效果.问题:

>在没有构建自定义布局的情况下,有没有一种简单的方法可以实现
>使用自定义布局并覆盖collectionViewContentSize方法是否成功获取集合视图以停止包装项目并在两个方向上滚动?
>如果我必须构建一个自定义布局 – 我将不得不投入一些时间来学习 – 我是否将uICollectionViewLayout子类化,或者将子类化UICollectionViewFlowLayout节省时间?

更新:
我尝试将uICollectionView嵌入为UIScrollView的子视图.集合视图本身表现正常 – 行没有包装在滚动视图的边缘,告诉我它正在填充我设置的UIScrollView内容大小.但是滚动视图不会在水平方向上平移,即它只是垂直滚动,集合视图无论如何都会自动进行.再次陷入困境.响应者链是否存在问题?

解决方法

找出两种方法来做到这一点.两者都需要自定义布局.问题是认的流布局 – 我现在从Collection View ProgrAMMing Guide知道这部分是流布局的定义 – 根据superview的边界生成单元布局属性,并将项目包装在将它们保持在边界内的部分,以便仅在一个轴上进行滚动.将跳过代码细节,因为它并不难,我的问题主要是对采取什么方法的困惑.

简单方法:使用UIScrollView和子类’UICollectionViewFlowLayout’.在UIScrollView中嵌入UICollectionView.在viewDiDLoad中设置滚动视图的contentSize属性以匹配集合视图将占用的完整大小(这将使认流布局将项放在一个段中的一行中而不包装).子类UICollectionViewFlowLayout,并将该对象设置为集合视图的自定义布局.在自定义流布局中,覆盖collectionViewContentSize以返回集合视图矩阵的完整大小.使用此方法,您将使用流布局,但可以在两个方向上滚动以查看未包装的部分.缺点是你仍然有一个非常有限的流程布局.另外,将uICollectionView放在其自己的超类的实例中只是为了获得集合视图本身应该具有的功能似乎很笨拙.

更难的方式,但更多功能和优雅:子类UICollectionViewLayout.我使用this tutorial来学习如何实现完整的自定义布局.这里不需要UIScrollView.如果放弃流布局,子类UICollectionViewLayout,并将其设置为自定义布局,则可以构建矩阵并从集合视图本身获取正确的行为.这是更多的工作,因为你必须生成所有的布局属性,但你将被定位为使集合视图做你想做的任何事情.

在我看来,Apple应该在认的流布局中添加一个属性来抑制包装.让设备显示具有完整行和列的2D矩阵并不是一种奇特的功能,看起来应该更容易.

大佬总结

以上是大佬教程为你收集整理的ios – 防止在UICollectionView中“包装”项目全部内容,希望文章能够帮你解决ios – 防止在UICollectionView中“包装”项目所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。