如何让可滚动集合视图中的浮动标题视图保持其 Y 位置?
Posted
技术标签:
【中文标题】如何让可滚动集合视图中的浮动标题视图保持其 Y 位置?【英文标题】:How to Have Floating Title View in Scrollable Collection View Keep Its Y Position? 【发布时间】:2014-11-15 22:36:46 【问题描述】:目标是 ios 7+ iPhone 4s、5、5s、6、6+
按照设计,我有一个滚动视图,其中包含一个仅显示一行单元格的集合视图。
使用此设置,效果很好。用户可以从右到左或上下滚动并比较单元格的内容。
滚动视图支持上/下滚动。集合视图支持左右滚动。
在每个集合视图单元格的顶部,我有一个 titleView(显示为“Some Title”)。当用户上下滚动时,我希望每个单元格的 titleView 始终浮动在屏幕顶部。 (见下图)
我已经接近答案了。我使用 scrollViewDidScroll 并将 titleView.origin.y 设置为 scrollView.contentOffset.y。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
for (CVKRecipeCollectionViewCell *cell in self.collectionView.visibleCells)
CGRect myFrame = cell.titleView.frame;
myFrame.origin.y = scrollView.contentOffset.y;
cell.titleView.frame = myFrame;
当用户上下滚动时有效。但是,当用户向右/向左滚动时,titleView 会将自身重置回其原始 y 位置 0。
如何将 titleView 保持在我在 scrollViewDidScroll 中指定的 y 位置?
显示问题的代码位于: https://bitbucket.org/finneycanhelp/kata_collection_view_and_flow_layout/branch/floating-title-view
CVKMainViewController 有 scrollViewDidScroll 方法。
【问题讨论】:
【参考方案1】:答案是在scrollViewDidScroll方法中使用scrollView的contentOffset。 collectionView 是一个滚动视图。因此,处理向上/向下滚动的滚动视图和处理从左到右滚动的 collectionView 都调用此方法。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
for (CVKRecipeCollectionViewCell *cell in self.collectionView.visibleCells)
CGRect myFrame = cell.titleView.frame;
myFrame.origin.y = self.scrollView.contentOffset.y;
cell.titleView.frame = myFrame;
【讨论】:
以上是关于如何让可滚动集合视图中的浮动标题视图保持其 Y 位置?的主要内容,如果未能解决你的问题,请参考以下文章
使用自动布局在 UIScrollView 中使用浮动视图滚动犹豫
如何在 UITableView 上浮动所有部分标题视图(或保持所有可见)?
scrollViewDidScroll(_ scrollView: UIScrollView) 到达底部后如何保持 UIButton 浮动?