我用垂直滚动制作了UICollectionView
。
单元格的宽度超过了屏幕宽度,因此我根据customFlowLayout
布局创建了UICollectionViewFlow
,返回正确的计算内容大小。
然而,这不起作用。当单元格的宽度小于屏幕宽度时,它可以工作。这是否意味着我们在垂直滚动中宽度不能超过屏幕宽度?
水平滚动相同,但CollectionView
的高度仅限于屏幕高度。
有没有办法让它发挥作用?
答案 0 :(得分:13)
正如其他人已经说过的那样,UICollectionView
只能使用流布局滚动一个方向。但是,您可以非常轻松地完成此操作,而无需创建自定义布局或使用第三方库。
当您在故事板中展示视图时,可以将UICollectionView
嵌入UIScrollView
。将滚动视图设置为水平滚动,UICollectionView
设置为垂直滚动。然后将UICollectionView.delaysContentTouches
设置为true,以便触摸将传递到UIScrollView
,而不会认为您正在尝试滚动集合视图。
当您设置UICollectionView
时,将其大小和单元格的大小设置为您实际想要的大小(比实际屏幕更宽)并相应地布置它们。
现在在包含UIViewController
中将此代码放入视图生命周期
- (void)viewDidLayoutSubviews {
self.myScrollView.contentSize = self.myCollectionView.frame.size;
}
这就是你要完成你所描述的所有事情。现在你的scrollview应该允许你水平滚动来查看你的整个单元格,你的collectionView应该垂直滚动你的单元格。
快乐的节目。
答案 1 :(得分:3)
Jirune提供的例子似乎是关键。但是如果可以使用collectionview行而不是行的部分,那就太好了..
答案 2 :(得分:0)
我不确定我是否理解你的问题。
但是如果您已经制作了自定义布局,请确保已实施:
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
并且您的布局属性框架和大小设置为“大单元格”索引路径的正确值。
同时确保您已实施:
- (CGSize) collectionViewContentSize;
此方法返回集合View的contentSize。如果contentSize.width> youAppFrame.width你应该有水平滚动。高度和垂直滚动相同。
另外,请确保您的collectionView允许滚动,并使用以下方法正确准备您的布局:
- (void)prepareLayout
顺便说一句,对于您的布局,您是否超载了UICollectionViewLayout
或UICollectionViewFlowLayout
?
答案 3 :(得分:0)
在你能做到这一点之前,你必须使用不同类型的布局。流布局将其项目表示为列表,并根据可用宽度跨单元格中的这些项目。 如果要同时进行水平和垂直滚动,则需要以某种方式指定网格的列数。 FlowLayout没有那个。一个简单的解决方案是创建一个UICollectionViewLayout的子类并覆盖collectionViewContentSize,使其重新调整宽度=一行的单元格宽度的增加总和(这是知道需要多少个列的位置),以及之间的任何额外间距他们。如果您的单元格每列具有相同的大小(类似于网格),则此方法可以正常工作。
答案 4 :(得分:0)
答案 5 :(得分:0)
您应该将UITableView嵌入到UIScrollView中。 ScrollView和TableView的高度相同,但宽度不同。 这样,UITableView将垂直滚动,而UIScrollView将水平滚动。