0

この質問をどのように説明すればよいかわからないので、鈍いタイトルを許してください。

最近、多くの iOS アプリがスクロール UI デザイン パターンを利用して、画面の領域を最大化するのに役立ちます。通常、ユーザーが下にスクロールするとヘッダーが非表示になります。

たとえば、Instragram のメイン ビューには、上部に Instragram ヘッダーがあります。このビューを上にスクロールすると、ヘッダーが上部に固定されたままになり、ビューは通常どおりコンテンツの上部に戻ります。しかし、下にスクロールすると、ヘッダーがコンテンツの一部として機能し、44 ポイントの垂直スペースが追加されます。

おそらく、私はしばらく iOS の作業をあまり行っていないのでしょうが、これを実現する最善の方法を簡単に理解することはできませんか? ひどい説明で申し訳ありません。

4

2 に答える 2

1

何があってもヘッダーが表示されない場合は、スクロール ビューの上に別のビューを使用します。UITableView を使用すると、セクション ヘッダーを使用できます。

編集このコードを使用してください:

- (void)scrollViewDidScroll:(UIScrollView*) scrollView
{
    CGPoint offset = scrollView.contentOffset;

    CGRect headerFrame = _headerView.frame;

    if(offset.y > 0){
        headerFrame.origin.y = offset.y;
    }
    else{
        headerFrame.origin.y = 0.0;
    }

    [_headerView setFrame:headerFrame];
}

(_headerView がヘッダーであり、スクロール ビューの内部ではなく、スクロール ビューの上にあると仮定します。また、スクロール ビューとヘッダーの両方が、親ビューの上部 y==0 から始まります。また、ビュー コントローラーを次のように設定する必要があります。スクロール ビューのデリゲート)

私はこのコードを記憶から書きました。テストはしていませんが、せいぜい調整が必要なだけです。

于 2012-07-10T11:59:42.127 に答える
1

上記のranReloadedの答えを試しましたがsetFrame:、 UIScrollView を呼び出すと、境界を超えたときにビューが跳ね返るのを止めるようです。

代わりに、スクロール ビューを という別の UIView 内に収まるように設定しましたscrollerWrapper。計算された原点と高さをこのビューに適用すると、バウンス動作を保持した後に効果が得られます。

- (void)scrollViewDidScroll:(UIScrollView*) scrollView
{
    CGPoint offset = scrollView.contentOffset;

    CGRect headerFrame = header.frame;
    CGRect wrapperFrame = scrollerWrapper.frame;

    if(offset.y > 0){
        headerFrame.origin.y = -offset.y;
        wrapperFrame.origin.y = MAX(0, headerFrame.size.height - offset.y);
        }
    else{
        headerFrame.origin.y = 0.0;
        wrapperFrame.origin.y = headerFrame.size.height;
        }
   wrapperFrame.size.height = self.view.frame.size.height - wrapperFrame.origin.y;

    [header setFrame:headerFrame];
    [scrollerWrapper setFrame:wrapperFrame];
}
于 2012-07-10T16:27:00.230 に答える