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 消除滚动滞后
滚动应用:UIPageViewController vs UIScrollView