iPhone - 自动调整大小的UIWebView内容不适合框架

29

我在viewDidLoad方法中生成了一个UIWebView,大小很小(比如说50x70),然后将其放到父UIView中。

我想让它的内容适应webView的框架。为此,我写了以下代码:

        oneView = [[UIWebView alloc] initWithFrame:CGRectMake(x, y, W, H)];
        oneView.backgroundColor = [UIColor whiteColor];
        oneView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
        oneView.scalesPageToFit = YES;
        oneView.autoresizesSubviews = YES;

        [self.view addSubview:oneView];
        [oneView loadRequest:/*some request*/];

但是这样做,网页并没有调整到UIWebView的框架大小。它似乎被缩小到比父视图的框架小,并且比webview的框架要宽。

在此输入图片描述

如果我将webview的框架大小设置为整个父视图的大小,那就没问题了。
我该如何强制web内容(真正的www内容)适应“缩小”的UIWebView的框架?


你能把loadRequest这行代码和addSubview的代码交换一下吗?你能发一张截图吗?如果你最初将webview的frame设置为superview的frame,大小看起来合适吗? - Nick Weaver
7个回答

44
答案是:您已经在做这件事,但有限制。
看以下截图:
截图1,scalesPageToFit为YES和NO
两个webview的宽度都相同。下面的一个页面完美地适合屏幕。

enter image description here

屏幕截图2,scalesPageToFit都为YES但设置了较小的宽度

两个webview都尝试适应页面,但由于存在大小限制,无法实现。

enter image description here


能否截取内容,进行图形调整,然后显示出来? - Oliver
可以的,这很容易:看一下如何从UIWebView的屏幕截图获取UIImage - Nick Weaver

3

尝试这个。我用这个方法可以顺利运行。

NSString *strTemplateHTML = [NSString stringWithFormat:@"<html><head><style>img{max-width:100%%;height:auto !important;width:auto !important;};</style></head><body style='margin:0; padding:0;'>%@</body></html>", @"insert your html content here"];

[webView loadHTMLString:strTemplateHTML baseURL:nil];

2

对于遇到相同问题的人,你可以通过以下方式关闭UIWebView的本地滚动:

self.webView.scrollView.scrollEnabled = NO;

请添加一个单独的scrollView,用于处理滚动和缩放,而不使用webView的原生滚动。 接下来实现。

- (void) webViewDidFinishLoad:(UIWebView *)webView
{
   CGRect frame = _webView.frame;
   CGSize fittingSize = [_webView sizeThatFits:_webView.scrollView.contentSize];
   frame.size = fittingSize;
   _webView.frame = frame;
   self.scrollView.contentSize = self.webView.scrollView.contentSize;
}

设置适当的 webView 框架。 希望这能帮助到某些人。Happy coding!


1
在Webview中使用sizethatfits(),这将解决您的问题。

0

对于 Swift 2.2,我已经通过以下方式实现了相同的效果

//Document file url
var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")

let req = NSURLRequest(URL: docUrl!)
webView.delegate = self
//here is the sole part
webView.scalesPageToFit = true
webView.contentMode = .ScaleAspectFit
webView.loadRequest(req)

0

对于Swift 3,我已经用以下方式实现了相同的效果

DispatchQueue.main.async {
                if let finalURL = URL(string: urlString) {
                    let request = URLRequest(url: finalURL)

                    // self.webView.sizeToFit()
                    self.webView.scalesPageToFit = true
                    self.webView.contentMode = .scaleAspectFit
                    self.webView.loadRequest(request)
                }
            }

0
你可以做以下事情:
oneview.contentMode = UIViewContentModeScaleAspectFit;

这将使您的视图内容随着视图的增长而增长。内容将尽可能地增大,同时仍适合于UIWebView并且不会变形。

此属性还有其他选项,您将在iOS视图编程指南中找到更复杂的选项的相当好的解释,以及显示每个选项效果的图片。

请注意,您设置的自动调整大小掩码仅在其父视图增长时才会使视图本身增长。如果self.view在创建小型UIWebView时已经很大并且self.view没有增长,则UIWebView将不会增长。您可能已经意识到了这一点,但我还是加上了,因为我们无法在此代码片段中看到self.view的框架。

希望这有所帮助。


self.view 的框架是什么? - salo.dm
1
请注意,还有一个UIWebView属性可以设置如下:oneView.scalesPageToFit = YES。 - salo.dm
抱歉,我错了。可能没有正确理解您的问题,以为您的问题是关于调整 web 视图大小的。 - salo.dm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接