Увеличьте UIWebView, как приложение для почтовых ящиков iOS

Я хотел бы воссоздать представление, которое можно масштабировать, например, приложение iPhone/iPad Mail или Sparrow при просмотре электронной почты, где наверху есть блок информации, а затем UIWebView. Я, очевидно, могу сделать это легко в построителе интерфейса или коде, НО я бы хотел, чтобы он вел себя как приложение Mail.

"Как" Почтовое приложение ", я имею в виду, когда вы зажимаете масштаб (в любом месте в представлении), UIWebView является единственным видом, который фактически масштабируется, а верхнее содержимое остается того же размера. Когда вы уменьшаете масштаб слишком далеко и видите фон, весь вид масштабируется (а не только изображение UIWebview), и прокручивается весь просмотр.

Я уже немного экспериментировал и пробовал некоторые из предложений, например, вставляя верхний вид в верхней части UIWebView, расширяя высоту UIWebView на основе размера содержимого, но это всегда заканчивается либо масштабированием верхнего вида тоже, или просто UIWebView.

Надеюсь, это имеет смысл. Это может быть очень просто, но я пытался разобраться в этом некоторое время, и я не вижу дерева для деревьев.

Это для приложения MonoTouch, но если у кого есть Objective-C примеры или что-то, что я могу преобразовать и отправить обратно.

Ответы

Ответ 1

Я сделал именно это для нашего приложения; это не так просто, как кажется, но на iOS 5 он должен быть несколько менее сложным, чем iOS 4. Посмотрите на верхнюю часть, которую вы хотите иметь постоянную. Когда ваш веб-просмотр завершает загрузку HTML и отображает его, получите scrollView веб-представления и добавьте ваше представление в качестве подзадачи к этому. Добавьте высоту кадра верхнего вида в contentSize.height прокрутки и добавьте высоту в origin.y остальных подсмотров прокрутки (те, которые не являются вашим верхним видом). Установите контроллер вида в качестве делегата прокрутки просмотра веб-представления. Всякий раз, когда пользователь прокручивает:

- (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.