如何在UIScrollView中实现不可滚动的UICollectionView?

时间:2014-08-12 04:13:54

标签: ios ios7 uiscrollview uicollectionview

简而言之,我所需的屏幕布局基本上是用户配置文件(iOS 7 + Xcode 5)。我使用UIScrollView作为顶级视图。 原因是我希望其所有子视图都滚动(用户信息视图 - 带有个人资料图片的视图和您在屏幕上看到的一些按钮,以及照片集合视图 - 带有黑色背景)滚动时。

enter image description here

黑色背景区域将显示用户照片。我想知道我是否可以在这里使用UICollectionView,或者有更好的方法来实现它。在这种情况下,UICollectionView不能自己滚动,它只显示所有单元格,而滚动工作由最外层的UIScrollView处理。

我阅读了以下帖子:

UICollectionView inside of UIScrollView

UICollectionView in UIScrollView -> Scroll Order

iOS 7 Collection View inside Scroll View

有人说在UIScrollView中实现UICollectionView是不可能的(或者至少是奇怪的),因为UIScrollView是UICollectionView的超类,它会导致意外的行为。有人说它应该以另一种方式实施(但我没有看到明确的建议)。

1 个答案:

答案 0 :(得分:7)

是的,您可以在UICollectionView内加UIScrollViewiOS has fully supported nested scroll views since iOS 3.0UICollectionViewUIScrollView的子类。例如,查看iOS设备上的App Store应用程序。屏幕垂直滚动 - 它是UIScrollViewUITableView(它本身是UIScrollView的子类)。每行图标都水平滚动 - 每行都是UICollectionView

但是,不清楚为什么需要在滚动视图中放置一个集合视图。听起来你只想让照片视图滚动,所以只需将照片视图设为集合视图即可。为什么需要将集合视图放在滚动视图中?

更新

只需使用集合视图即可。将第0部分的标题设置为配置文件信息视图。你不需要滚动视图。

如果您将所有照片放在一个部分中,则可以在故事板中设置标题,而无需代码。如果您使用多个部分,则需要在代理中实施collectionView:layout:referenceSizeForHeaderInSection:并在数据源中实施collectionView:viewForSupplementaryElementOfKind:atIndexPath: