如何让可滚动集合视图中的浮动标题视图保持其 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 浮动?

如何在滚动视图中隐藏和取消隐藏 UiViews 中的浮动按钮?

解锁锁定屏幕后如何保持浮动操作按钮固定在我的视图中?

如何制作浮动视图?