14

メールを表示するときに iPhone/iPad メール アプリや Sparrow のようにズームできるビューを再作成したいと思います。上部には情報のブロックがあり、次に UIWebView があります。インターフェイスビルダーまたはコードでこれを簡単に実行できることは明らかですが、メールアプリのように動作させたいと思います。

「メール アプリのように」とは、ズーム (ビュー内の任意の場所) をピンチすると、UIWebView が実際にズームする唯一のビューであり、上部のコンテンツは同じサイズのままです。ズームアウトしすぎて背景が表示されると、(UIWebview だけでなく) ビュー全体がズームアウトし、ビュー全体もスクロールします。

UIWebViewの上部にトップビューを挿入したり、コンテンツサイズに基づいてUIWebViewの高さを拡張したりするなど、いくつかの実験を行い、いくつかの提案をすでに試しましたが、これは常にトップビューのズームでも終了します、またはUIWebView だけです。

意味があることを願っています。それは本当に単純かもしれませんが、私はこれをしばらくの間オンとオフで整理しようとしてきました。

これは MonoTouch アプリ用ですが、誰かが Objective-C の例などを持っている場合は、変換して投稿することができます。

4

1 に答える 1

7

私たちのアプリケーションではまさにそれを行いました。思ったほど単純ではありませんが、iOS 5 では iOS 4 よりもやや複雑ではありません。Web ビューが HTML の読み込みを完了してレンダリングしたら、Web ビューの を取得しscrollView、そのビューをサブビューとして追加します。トップ ビューのフレームの高さをcontentSize.heightスクロール ビューに追加し、スクロール ビューorigin.yの残りのサブビュー (トップ ビューではないもの) に高さを追加します。ビュー コントローラーを Web ビューのスクロール ビューのデリゲートとして設定します。ユーザーがスクロールするたびに:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{   
    CGRect frame = contentView.frame;

    if(scrollView.contentOffset.x < 0)
    {
        frame.origin.x = 0;
    }
    else if((scrollView.contentOffset.x + contentView.frame.size.width) > scrollView.contentSize.width)
    {
        frame.origin.x = scrollView.contentSize.width - contentView.frame.size.width;
    }
    else
    {
        frame.origin.x = scrollView.contentOffset.x;
    }

    [contentView setFrame:frame];
}

これにより、mail.app ビューとまったく同じように動作するはずです。

于 2012-05-05T15:46:44.010 に答える