在Facebook的iOS应用的时间表浮动栏添加到滚动视图像(Add a floating bar

2019-07-31 06:01发布

我一直在玩弄添加不同的互动,我的一个测试项目,并且我有麻烦添加类似Facebook的职位状态栏,即在时间轴上滚动视图和卷轴与当你向下滚动滚动视图坐在一个视图,但停留在导航栏下卡住,当你滚动起来了。

我一直在建立一个独立的UIViewController(不UIView的),并且将其添加为一个子视图到主视图控制器。 我不完全也知道在哪里从那里虽然...如何与滚动视图新视图滚动? 应我甚至可以使用一个单独的视图 - 控制?

任何帮助将不胜感激! 谢谢!

Answer 1:

这里是你可以用它来上手一些示例代码,只需将其添加到您的视图控制器。 它采用了通用UIView的浮动酒吧和通用UIScrollView滚动视图,但你可以改变任何你想要的。

@interface BNLFDetailViewController () <UIScrollViewDelegate> {
    UIScrollView *_scrollView;
    UIView *_floatingBarView;
    CGFloat _lastOffset;
}
@end

而在@implementation补充:

- (void)viewDidLoad {
    [super viewDidLoad];

    _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
    _scrollView.delegate = self;
    _scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2);
    [self.view addSubview:_scrollView];

    CGRect f = self.view.bounds;
    f.size.height = kFloatingBarHeight;
    _floatingBarView = [[UIView alloc] initWithFrame:f];
    _floatingBarView.backgroundColor = [UIColor blackColor];
    [self.view addSubview:_floatingBarView];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == _scrollView) {
        CGFloat offsetChange = _lastOffset - scrollView.contentOffset.y;
        CGRect f = _floatingBarView.frame;
        f.origin.y += offsetChange;
        if (f.origin.y < -kFloatingBarHeight) f.origin.y = -kFloatingBarHeight;
        if (f.origin.y > 0) f.origin.y = 0;
        if (scrollView.contentOffset.y <= 0) f.origin.y = 0; //Deal with "bouncing" at the top
        if (scrollView.contentOffset.y + scrollView.bounds.size.height >= scrollView.contentSize.height) f.origin.y = -kFloatingBarHeight; //Deal with "bouncing" at the bottom
        _floatingBarView.frame = f;

        _lastOffset = scrollView.contentOffset.y;
    }
}

你应该做它作为一个UIView ,而不是一个UIViewController 。 在IOS发展的总的规则是,视图控制器占用整个屏幕和视图被用于该占用屏幕的一部分(尽管这是不太适用于iPad的情况下)“子视图”。 无论哪种方式,一个UIViewController有它自己的生命周期( willAppeardidAppear ,等等),所以绝对应该是它并不需要/想为浮动栏UIView



文章来源: Add a floating bar to a scroll view like in the Facebook iOS app's timeline