多个滚动视图?

Posted

技术标签:

【中文标题】多个滚动视图?【英文标题】:Multiple Scrollviews? 【发布时间】:2014-11-23 09:33:37 【问题描述】:

我真的不知道如何解释我想要什么,所以这是一张图片:

我有一个包含很多子视图(灰线)的视图。然后背景(蓝色)是一张图片(UIImageView + Blur 效果),所以我需要它留下而不是滚动。在背景后面,有一个视图(橙色)。我希望图片(蓝色)仅在子视图(灰色)位于底部(第三张图片)时滚动。

我应该使用嵌入滚动视图,还是只使用一个 UIScrollView 就能获得这种效果?如果有多个滚动视图,有人有例子吗?

非常感谢您的帮助

【问题讨论】:

【参考方案1】:

只使用一个滚动视图,并使用它的委托方法'scrollViewDidScroll'来读取内容偏移量。使用此值来翻译您的背景图片。

【讨论】:

【参考方案2】:

没有必要使用 2 个滚动视图。但我会使用它,因为我更喜欢设置背景滚动视图的contentOffset,而不是直接设置它的框架。

这个想法是你为前滚动视图实现scrollViewDidScroll:委托方法。并跟踪contentOffset,通过检查是否scrollView.contentOffset.y + scrollView.bounds.size.height > scrollView.contentSize.height来检查滚动是否到达其内容的末尾。

如果有,那么您使用超过内容大小的偏移量偏移背景视图的位置。

请看下面的代码。可以跳过所有代码,只看scrollViewDidScroll:

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;

    self.backgroundScrollView.userInteractionEnabled = NO;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return 20;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    cell.textLabel.text = [NSString stringWithFormat:@"Item %ld", (long)indexPath.row];
    return cell;


- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    CGFloat backgroundVerticalOffset = MAX(scrollView.contentOffset.y + scrollView.bounds.size.height - scrollView.contentSize.height, 0);
    CGPoint backgroundContentOffset = CGPointMake(0.0, backgroundVerticalOffset);
    self.backgroundScrollView.contentOffset = backgroundContentOffset;
    // If you decide not to use two scroll views, then please use backgroundContentOffset to set the backgroundView.frame.origin.y instead
    // e.g. backgroundView.frame.origin.y = -backgroundContentOffset;

结果如下:

附:我使用蓝色背景视图而不是图像视图和其他所有具有清晰背景颜色的视图。

【讨论】:

在您的示例中,故事板层次结构是什么?蓝色背景视图是:backgroundScrollView 的子视图还是 backgroundScrollView 的子视图? backgroundScrollView 位于tableView 后面。他们是兄弟姐妹。蓝色背景视图是backgroundScrollView的子视图。 哦,在您的示例中,滚动视图不会停留在上方位置,是吗?如果我希望滚动视图在拖动结束时保持在上方位置怎么办? “居高临下”是什么意思? 我的意思是当你停止点击时(当白色视图未隐藏时),滚动视图不会自行替换并且白色视图保持可见

以上是关于多个滚动视图?的主要内容,如果未能解决你的问题,请参考以下文章

彼此内部的多个滚动视图

多个滚动视图?

滚动视图中的多个视图副本

如何在滚动视图中进行多个表格视图

如何在 iOS 中获取多个滚动视图的索引

多个 UIView 上的 UITapGestureRecognizer(滚动视图子视图)