【问题标题】:Zoom a UIWebView like iOS Mail App像 iOS 邮件应用一样缩放 UIWebView
【发布时间】:2025-11-23 08:30:01
【问题描述】:

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

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

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

我希望这有点道理。这可能真的很简单,但我一直在尝试对此进行分类一段时间,因为我再也看不到树木了。

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

【问题讨论】:

  • 你有没有机会继承MFMailComposeViewController 来做你需要的事情?这是用于发送电子邮件的内置功能。

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


【解决方案1】:

我已经为我们的应用程序这样做了;它并不像听起来那么简单,但在 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 视图完全相同。

【讨论】:

  • 您可以通过将视图保持在 scrollView:didScroll: 中的正确位置来解决第二个问题。第二个问题可以通过添加第三个视图来解决,该视图的作用是在需要的地方保持底部为白色。
  • @LeoNatan:谢谢你的回答!你让我今天一整天都感觉很好 ! :)
最近更新 更多