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