3

我一直在尝试向我的测试项目添加不同的交互,并且在添加 Facebook 的帖子状态栏之类的东西时遇到了麻烦,该状态栏位于时间轴滚动视图上并在您向下滚动时与滚动视图一起滚动当您向上滚动视图时,该视图仍停留在导航栏下方。

我一直在创建一个单独的 UIViewController(不是 UIView)并将其作为子视图添加到主 ViewController。我不太确定从那里去哪里......新视图如何与滚动视图一起滚动?我什至应该使用单独的视图控制器吗?

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

4

1 回答 1

6

下面是一些示例代码,您可以开始使用,只需将其添加到您的视图控制器即可。它对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 的情况较少)。无论哪种方式, aUIViewController都有它自己的生命周期(willAppeardidAppear等),浮动条不需要/不需要它,所以它绝对应该是 a UIView

于 2012-08-30T05:50:43.903 回答