私は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のフレームに合わせてサイズ変更されません。スーパービューのフレームよりも小さく、ウェブビューのフレームよりも広い何かに拡大されているようです。
WebViewフレームサイズをスーパービュー全体のサイズに設定すると、問題ありません。
Webコンテンツ(実際のwwwコンテンツ)を「縮小された」UIWebViewのフレームに合わせるにはどうすればよいですか?
答えは次のとおりです。すでにこれを行っていますが、制限があります。
次のスクリーンショットをご覧ください。
スクリーンショット1、scalesPageToFit YESおよびNO
両方のwebviewの幅は同じです。下部のページは完全に収まります。
Screeshot 2、scalesPageToFitはYESであるが、幅を小さく設定
両方のwebviewはページに合わせようとしますが、サイズの制限があるため適合しません。
これを試してください。それは私のために働いています。
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];
同じ問題に直面した人のために、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
フレームを設定します。これが誰かを助けることを願っています。良いコーディング!
次のことができます。
oneview.contentMode = UIViewContentModeScaleAspectFit;
これにより、ビューの成長に合わせてビューのコンテンツが成長します。コンテンツはUIWebView内に収まり、歪みなく、可能な限り大きくなります。
このプロパティには他のオプションがあり、より複雑なもののかなり良い説明と、それぞれの効果を示す写真が iOS用プログラミングガイドの表示 にあります。
設定した自動サイズ変更マスクは、スーパービューが拡大したときにのみビュー自体を拡大することに注意してください。小さいUIWebViewが作成されたときにself.viewがすでに大きく、self.viewが大きくならない場合、UIWebViewは大きくなりません。あなたはおそらくこれを知っているでしょうが、このコードのスニペットでself.viewのフレームを見ることができないので、念のため追加します。
これが役に立てば幸いです。
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)
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)
}
}