我真的不知道如何解释我想要的东西,所以这是一张图片:
我有一个包含很多子视图的视图(灰线)。然后背景(蓝色)是一张图片(UIImageView +模糊效果),所以我需要它留下而不是滚动。在背景后面,有一个视图(橙色)。我希望图片(蓝色)仅在子视图(灰色)位于底部时滚动(第3张图片)。
我应该使用嵌入式滚动视图,还是只能使用一个UIScrollView获得此效果?如果有多个滚动视图,有人有例子吗?
非常感谢你的帮助
答案 0 :(得分:0)
仅使用一个滚动视图,并使用其委托方法“scrollViewDidScroll”来读取内容偏移量。使用此值翻译背景图像。
答案 1 :(得分:0)
没有必要使用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;
}
结果如下所示:
P.S。我使用蓝色背景视图而不是图像视图以及其他具有清晰背景颜色的视图。