3

私は自分のテストプロジェクトにさまざまなインタラクションを追加することで遊んでいますが、Facebookの投稿ステータスバーのようなものを追加するのに問題があります。これはタイムラインのスクロールビューにあり、下にスクロールするとスクロールビューでスクロールします。ビューですが、上にスクロールしているときはナビゲーションバーの下に留まります。

別のUIViewController(UIViewではない)を作成し、それをサブビューとしてメインのViewControllerに追加しています。そこからどこに行くのか正確にはわかりませんが...新しいビューはscrollviewでどのようにスクロールしますか?別のビューコントローラを使用する必要がありますか?

どんな助けでも大歓迎です!ありがとう!

4

1 に答える 1

6

開始に使用できるサンプルコードを次に示します。ViewControllerに追加するだけです。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など)がありますが、これはフローティングバーには不要/不要なので、間違いなく。である必要がありUIViewます。

于 2012-08-30T05:50:43.903 に答える