缩放UIWebView,如iOS Mail App

时间:2012-05-03 15:23:05

标签: objective-c ios uiwebview uiscrollview xamarin.ios

我想重新创建一个视图,您可以在查看电子邮件时像iPhone / iPad Mail应用程序或Sparrow一样进行缩放,其中顶部有信息块,然后是UIWebView。我显然可以在界面构建器或代码中轻松完成此操作,但我希望它的行为类似于Mail应用程序。

通过“类似邮件应用程序”我的意思是,当您缩放缩放(视图中的任何位置)时,UIWebView是唯一实际缩放的视图,并且顶部内容保持相同的大小。当您缩小太远并看到背景时,整个视图会缩小(不仅仅是UIWebview),整个视图也会滚动。

我已经做了一些实验,并尝试了一些建议,比如在UIWebView的顶部插入顶视图,根据内容大小扩展UIWebView的高度,但这总是以顶视图缩放结束也是,或者只是UIWebView。

我希望这是有道理的。它可能非常简单,但我一直试图对它进行一段时间的分类,以至于我再也看不到树木了。

这适用于MonoTouch应用程序,但如果有人有Objective-C示例或任何我可以转换并回发的内容。

1 个答案:

答案 0 :(得分:7)

我已经为我们的申请做了这件事;它并不像听起来那么简单,但在iOS 5上它应该比iOS 4复杂一些。 查看您希望保持不变的顶部部分。 当您的网络视图完成加载HTML并将其呈现时,请获取网络视图的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视图完全相同。