3

私のアプリケーションは を使用してUINavigationControllerおり、最終ビュー (詳細ビュー) では、 を使用してアプリケーション内で外部 Web サイトを表示できますUIWebView

ユーザーが Web ページを表示しているときに追加の画面領域を解放したいと考えており、コンテンツを表示しているときに上部の URL バーがスクロールアップして画面から消える iPhone の Safari の動作をエミュレートしたいと考えていますUIWebView。フォールドの下。

これを達成する方法について誰にもアイデアがありますか? プロパティを設定しnavigationBarHidden、独自のカスタム バーを上部にロールして設定すると、UIWebView他のスクロール可能なビューではうまく再生されないためUIScrollView、スクロールの問題が発生します。UIWebView

4

3 に答える 3

4

@Brian の提案に基づいて、このコードを作成しました。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat height = navigationBar.frame.size.height;
    CGFloat y = scrollView.bounds.origin.y;
    if (y <= 0) {
        CGRect frame = navigationBar.frame;
        frame.origin.y = 0;
        navigationBar.frame = frame;
    } else if (tableView.contentSize.height > tableView.frame.size.height) {
        CGFloat diff = height - y;
        CGRect frame = navigationBar.frame;
        frame.origin.y = -y;
        navigationBar.frame = frame;

        CGFloat origin = 0;
        CGFloat h = height; // height of the tableHeaderView
        if (diff > 0) {
            origin = diff;
            h = y;
        }
        frame = tableView.frame;
        frame.origin.y = origin;
        frame.size.height = tableView.superview.frame.size.height - origin;
        tableView.frame = frame;

        CGRect f = CGRectMake(0, 0, tableView.frame.size.width, h);
        UILabel* label = [[UILabel alloc] initWithFrame:f];
        tableView.tableHeaderView = label;
        [label release];
    }
}

私のコードにはUITableViewがありますが、スクロール可能なコンポーネントで動作するはずです。navigationBar とサブクラス以外のコンポーネントがある場合UIScrollViewは、スクロール可能なコンポーネントの高さの計算方法を変更する必要があります。このようなもの:

frame.size.height = tableView.superview.frame.size.height - origin - otherComponentsHeight;

tableHeaderView望ましい動作をさせるには、ダムを追加する必要がありました。問題は、scrollViewDidScroll: が呼び出されたときにコンテンツにオフセットがあることですが、Mobile Safari では、navigationBar が完全に消えるまでコンテンツがスクロールされないことがわかりました。最初に .y を 0 に変更しようとしcontentOffsetましたが、すべてのコードがスクロール メカニズムに依存しているため、明らかにうまくいきませんでした。そのため、高さがスクロールされたオフセットと正確に一致する を追加したtableHeaderViewので、ヘッダーは実際には表示されず、 がnavigationBar完全に消えるまでコンテンツはスクロールしないように見えます。

ダム t を追加しない場合ableHeaderView、スクロール可能なコンポーネントは . の後ろにスクロールするように見えますnavigationBar

ここに画像の説明を入力

を使用するtableHeaderViewと、スクロール可能なコンポーネントは実際にはスクロールします ( をscrollbar参照)。ただし、tableHeaderView高さが scrolled とまったく同じ があるため、スクロールoffset可能なコンテンツは、 がnavigationBar完全に消えるまでスクロールしていないように見えます。

ここに画像の説明を入力

于 2012-03-20T09:00:35.207 に答える
1

UIWebView でスクロール イベントのデリゲートを作成し、最初に UIWebView のスクロールを開始するときに、UIWebView の高さを増加させ、同時にナビゲーション バーを Y 方向にシフトしながら Y 位置を減少させます。ナビゲーション バーが完全に見えなくなったら、UIWebView のサイズを大きくするのをやめて、通常のスクロールができるようにします。

これにより、ナビゲーション バーが画面からスクロールするときに、ナビゲーション バーが UIWebView の一部であるかのように見えます。

また、反対方向にスクロールしていて、UIWebView のコンテンツの上部に到達している場合は、逆の操作を行う必要があります。

于 2009-11-20T17:24:33.280 に答える
0

明確な答えは出せませんが、iWebKit を見てください。多分それは解決策を提供します。デモには、少なくとも「フルスクリーン」アイテムが含まれています。

于 2009-11-19T18:01:08.187 に答える