Hen*_*y95 7 uiscrollview ios contentsize uicollectionview uicollectionviewlayout
我需要一个UICollectionView在宽度和高度上显示可能大于可见框架的网格,同时保持行和列的完整性.默认情况下UICollectionViewFlowLayout允许部分在屏幕外滚动,但它会将部分包装在一个部分中,以便将它们全部保存在屏幕上,从而搞砸了我的网格.
认识到这UICollectionView是一个子类UIScrollView,我尝试在viewDidLoad中手动设置集合视图的内容大小属性:
self.collectionView.contentSize = CGSizeMake((columns * (cellWidth + itemSpacingX), (rows * (cellHeight + itemSpacingY));
Run Code Online (Sandbox Code Playgroud)
但这没有效果.问题:
collectionViewContentSize方法会成功获取集合视图以停止包装项目并向两个方向滚动吗?UICollectionViewLayout,还是子类化UICollectionViewFlowLayout节省时间?更新:我尝试将UICollectionView嵌入为UIScrollView的子视图.集合视图本身表现正常 - 行没有包装在滚动视图的边缘,告诉我它正在填充我设置的UIScrollView内容大小.但是滚动视图不会在水平方向上平移,即它只是垂直滚动,集合视图无论如何都会自动进行.再次陷入困境.响应者链是否存在问题?
找出两种方法来做到这一点.两者都需要自定义布局.问题是默认的流布局 - 我现在从Collection View Programming Guide知道这部分是流布局的定义 - 根据superview的边界生成单元布局属性,并将项目包装在将它们保持在边界内的部分,以便仅在一个轴上进行滚动.将跳过代码细节,因为它并不难,我的问题主要是对采取什么方法的困惑.
简单方法:使用UIScrollView和子类'UICollectionViewFlowLayout'.嵌入UICollectionView一个UIScrollView.设置滚动视图的contentSize属性viewDiDLoad以匹配集合视图将占用的完整大小(这将使默认流布局将项放在一个段中的一行中而不包装).子类UICollectionViewFlowLayout,并将该对象设置为集合视图的自定义布局.在自定义流布局中,覆盖collectionViewContentSize以返回集合视图矩阵的完整大小.使用此方法,您将使用流布局,但可以在两个方向上滚动以查看未包装的部分.缺点是你仍然有一个非常有限的流程布局.另外,UICollectionView为了获得集合视图本身应具有的功能,将一个自己的超类的实例置于内部似乎很笨拙.
更难的方式,但更多功能和优雅:子类UICollectionViewLayout. 我使用本教程来学习如何实现完整的自定义布局.你不需要UIScrollView这里.如果放弃流布局,子类UICollectionViewLayout并将其设置为自定义布局,则可以构建矩阵并从集合视图本身获取正确的行为.这是更多的工作,因为你必须生成所有的布局属性,但你将被定位为使集合视图做你想做的任何事情.
在我看来,Apple应该在默认的流布局中添加一个属性来抑制包装.让设备显示具有完整行和列的2D矩阵并不是一种奇特的功能,看起来应该更容易.
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |