如何在 UIModalPresentationFormSheet 中调整 UIWebView 的大小?

Posted

技术标签:

【中文标题】如何在 UIModalPresentationFormSheet 中调整 UIWebView 的大小?【英文标题】:How to size UIWebView in a UIModalPresentationFormSheet? 【发布时间】:2013-04-05 05:40:39 【问题描述】:

我尝试了人类已知的所有排列,但我无法让 UIWebView 在 iPad 的模态表单视图中正确调整大小。网页仍显示 768 磅的完整 iPad 纵向宽度。

我在哪里以及如何告诉 UIWebView 显示宽度为 540 点?

我认为“scalesPageToFit”应该这样做,但它不起作用。

我尝试将 Web 视图设置为带有导航和状态栏的 540 x 576 的表单视图大小。不过身高无关紧要。

我尝试将 UIWebView 添加到情节提要中的 UIView 并设置所有调整大小。然后我删除了 UIWebView 并以编程方式添加它。

- (void)viewDidLoad

    [super viewDidLoad];

    CGRect aFrame = self.view.frame;

    if (IS_IPAD)
    
        aFrame = CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT);
    

    _webView = [[UIWebView alloc] initWithFrame:aFrame];
    [_webView setOpaque:NO];
    [_webView setDelegate:self];
    [_webView setScalesPageToFit:YES];

    self.view = _webView;
    ...

我也试过在viewDidAppear中加载(除了viewDidLoad、viewWillAppear等)

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    [[self webView] setFrame:CGRectMake(0, 0, FORM_VIEW_WIDTH, FORM_VIEW_HEIGHT)];
    [[self webView] setScalesPageToFit:YES];

    NSURL *webURL = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0f];
    [[self webView] loadRequest:request];

任何建议表示赞赏。

【问题讨论】:

【参考方案1】:

这一直发生在我身上。我发布了一个冗长的问题,然后两秒钟后我找到了答案。

无论如何,有人在这里发布了解决此问题的方法: UIWebView -- load external website, programmatically set initial zoom scale, and allow user to zoom afterwards

但是,我更改了脚本以将宽度设置为 iPad 宽度:

- (void)webViewDidFinishLoad:(UIWebView *)webView

    NSString* js =
    @"var meta = document.createElement('meta'); "
    @"meta.setAttribute( 'name', 'viewport' ); "
    @"meta.setAttribute( 'content', 'width = 540px, initial-scale = 1.0, user-scalable = yes' ); "
    @"document.getElementsByTagName('head')[0].appendChild(meta)";

   [[self webView] stringByEvaluatingjavascriptFromString: js];

注意部分'width = 540px,initial-scale = 1.0,user-scalable = yes'

我将宽度更改为表单宽度,缩放为 1.0。

我还需要处理 iPhone,所以接下来我会对此进行调整。我认为这个修复可能只需要 iPad 表单视图。

更新:答案是短暂的。如果我加载任何其他页面,尺寸将再次被丢弃。回到第一格。

解决方案:此视图只需要访问我开发的几个网页。因此,我通过将元标记添加到每个网页来更新我需要访问的几个网页。我只需要访问这些页面,所以这是我计划采用的解决方案。这意味着我需要以某种方式仅将 iPad 的视口宽度设置为 540px。接下来我会弄清楚的。

<meta name="viewport" content="width:540, initial-scale=1, maximum-scale=1">

【讨论】:

我目前的实现是我编写了一个 python 脚本来从源页面解析和生成目标页面作为 help_ipad.html,这些页面可以在 iPad 上的表单视图中访问。 值得注意的一点:如果你不清除我在旋转应用程序时发现的视口,它将失去应用的属性。您可以通过首先运行此脚本来清除视口: [webView stringByEvaluatingJavaScriptFromString: @"$('meta[name=viewport]').remove();"];

以上是关于如何在 UIModalPresentationFormSheet 中调整 UIWebView 的大小?的主要内容,如果未能解决你的问题,请参考以下文章

在QGIS中如何添加天地图的WMTS

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?