web-dev-qa-db-ja.com

iPhone-UIWebViewコンテンツの自動サイズ変更がフレームに合わない

私は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*/];

ただし、これを行うと、WebページはUIWebViewのフレームに合わせてサイズ変更されません。スーパービューのフレームよりも小さく、ウェブビューのフレームよりも広い何かに拡大されているようです。

enter image description here

WebViewフレームサイズをスーパービュー全体のサイズに設定すると、問題ありません。
Webコンテンツ(実際のwwwコンテンツ)を「縮小された」UIWebViewのフレームに合わせるにはどうすればよいですか?

28
Oliver

答えは次のとおりです。すでにこれを行っていますが、制限があります。

次のスクリーンショットをご覧ください。

スクリーンショット1、scalesPageToFit YESおよびNO

両方のwebviewの幅は同じです。下部のページは完全に収まります。

enter image description here

Screeshot 2、scalesPageToFitはYESであるが、幅を小さく設定

両方のwebviewはページに合わせようとしますが、サイズの制限があるため適合しません。

enter image description here

44
Nick Weaver

これを試してください。それは私のために働いています。

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フレームを設定します。これが誰かを助けることを願っています。良いコーディング!

2
zshcbka

次のことができます。

oneview.contentMode = UIViewContentModeScaleAspectFit;

これにより、ビューの成長に合わせてビューのコンテンツが成長します。コンテンツはUIWebView内に収まり、歪みなく、可能な限り大きくなります。

このプロパティには他のオプションがあり、より複雑なもののかなり良い説明と、それぞれの効果を示す写真が iOS用プログラミングガイドの表示 にあります。

設定した自動サイズ変更マスクは、スーパービューが拡大したときにのみビュー自体を拡大することに注意してください。小さいUIWebViewが作成されたときにself.viewがすでに大きく、self.viewが大きくならない場合、UIWebViewは大きくなりません。あなたはおそらくこれを知っているでしょうが、このコードのスニペットでself.viewのフレームを見ることができないので、念のため追加します。

これが役に立てば幸いです。

0
salo.dm

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
swiftBoy

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
Lion