为啥我的 uicollectionview 不随底层 uiscrollview 一起移动?

Posted

技术标签:

【中文标题】为啥我的 uicollectionview 不随底层 uiscrollview 一起移动?【英文标题】:Why doesn't my uicollectionview move with the underlying uiscrollview?为什么我的 uicollectionview 不随底层 uiscrollview 一起移动? 【发布时间】:2018-02-14 15:26:21 【问题描述】:

我有一个使用 Xcode 9.2 构建的简单 ios 应用程序,用 Swift 4 编写。我有一个工作的垂直滚动视图,上面放置了一个工作的水平滚动集合视图。滚动可以按我的意愿进行,除了垂直滚动时集合视图不会与其余内容一起移动(请参阅屏幕截图,其中集合视图保持在相同的绝对位置,无论滚动到底层视图的顶部还是底部)。

我尝试按照this question 的第二个答案中的步骤操作,但是当我按照描述向集合视图添加约束时,集合视图停止出现在模拟中并且垂直滚动停止工作。

如果可能,我希望在滚动时让集合视图随其余内容一起上下移动。

【问题讨论】:

显示你的约束,它们是你麻烦的根源 【参考方案1】:

你的约束可能有问题:

    消除所有约束,让自动布局来完成这项工作 尝试移除您的 scrollView 和您的 collectionView 之间的视图。

超级提示:为您的视图添加背景颜色,它可以让您以更好的方式进行调试。

编辑:

    将您的 UIScrollView 添加到您的 Superview 并设置四个约束(前导/尾随/顶部/底部)。 在滚动视图中添加一个 UIView;为 Scrollview 设置四个约束并为 UIView 设置一个 backgroundColor 以防您需要调试 在 UIView 和 Scrollview 之间添加“等宽”+“等高”约束 将您想要的任何元素添加到最后创建的 UIView 运行应用程序,您的所有项目都应该能够滚动。 为自动布局添加最后缺少的约束以正常工作: UIView 中的所有元素都应该对 UIView 有前导+尾随约束(水平居中也可以是一个不错的选择) 在元素之间放置垂直约束,从顶部开始。在您的情况下,“顶部”标签对 UIView 具有“顶部约束”,而“底部”标签对 UIView 具有“底部约束”。 为您的项目设置高度限制,以便滚动视图具有 contentSize

这是结果的截图:

【讨论】:

如果他移除所有约束,自动布局应该使用什么来完成它的工作? 是的,我的意思是故事板/xib 中的“添加约束”工具。其实不知道怎么称呼它 这没有任何意义 @Cerise 我尝试删除它们之间的视图,但它破坏了垂直滚动。我还尝试让 IB “添加缺少的约束”(将中间视图放回原处),它并没有改变我在上面的屏幕截图中显示的行为。 @Cerise 我按照您的指示进行了一项更改:我必须使 UIView 高度大于滚动视图才能使其垂直滚动。那时,UIView 会在顶部和底部之间滚动,但集合会留在屏幕上。当我按照您的描述在所有元素之间添加约束时,集合视图从模拟器中消失了。仍在努力解决这个问题。

以上是关于为啥我的 uicollectionview 不随底层 uiscrollview 一起移动?的主要内容,如果未能解决你的问题,请参考以下文章

没有填充或边距:是啥让我的表格无法获得 100% 的宽度? & 为啥当鼠标悬停在可滚动的 el 上时滚动条不随滚轮滚动?

为啥我的 UICollectionView 大纲不起作用?

为啥我的 UICollectionView 单元格在我的 swift ios 应用程序中不可点击?

为啥我不能从我的 UICollectionView 中删除图像?

为啥我的 UICollectionView 支持方法仅在我的 ViewController 设置为初始视图控制器时调用?

为啥我的 UICollectionView 无法访问我在 for 循环中创建的数组 - 致命错误:索引超出范围