UIScrollView + 在滚动屏幕之前将项目固定到顶部

Posted

技术标签:

【中文标题】UIScrollView + 在滚动屏幕之前将项目固定到顶部【英文标题】:UIScrollView + pin items to top before scrolling off screen 【发布时间】:2013-10-08 18:24:08 【问题描述】:

我正在复制 Passbook/ios7 提醒界面,其中有一堆堆叠在一起的卡片,偏移以便卡片的顶部显示出来。有一个主滚动视图,每张卡片都添加为子视图。

当用户向上滚动时,我希望最上面的卡片固定在顶部,所以 1 叠放在 0 上,2 叠放在 1 上,等等。

我使用我的滚动视图的委托让它工作:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    if (scrollView.contentOffset.y < 0) return;

    int offsetBetweenItems = 50;

    int indexForTopCard = (int)(scrollView.contentOffset.y / offsetBetweenItems);
    Card *card = self.cards[indexForTopCard];

    card.frame = CGRectMake(0, scrollView.contentOffset.y, card.frame.size.width, card.frame.size.height);

只要滚动顺畅且缓慢,这实际上效果很好。但是,当积极地滚动回顶部 (0) 卡片时,堆叠会变得一团糟,我失去了统一的 50 像素偏移量。

我认为这是因为我找到了带有indexForTopOfCard 的卡片。如果滚动太快,则无法保证我能够按顺序调整每张卡片,有时会完全跳过几张卡片。

保证每张卡都保证按顺序调整的最好方法是什么?

【问题讨论】:

您是否尝试过构建集合视图自定义布局? 不,我还不太熟悉如何做到这一点。 可以继承 UICollectionViewFlowLayout 并调整 layoutAttributesForItemAtIndexPath: 中每个属性项的边框。 【参考方案1】:

您可以使用带有部分的 UITableView 轻松实现这一点。

【讨论】:

这似乎更像是评论......而不是回答!

以上是关于UIScrollView + 在滚动屏幕之前将项目固定到顶部的主要内容,如果未能解决你的问题,请参考以下文章

使用带有动态渲染项目的 UIScrollView 消除滚动滞后

UIScrollView

滚动应用:UIPageViewController vs UIScrollView

如何将标题固定在仅在 x 维度上滚动的 UIScrollView 之上?

Objective-C UIScrollView 不滚动

不使用 UIScrollView 滚动屏幕