iOS 8 以降で実行しているときに、UIWebView の動的に割り当てられたインスタンスを WKWebView インスタンスに置き換える実験を行っていますが、WKWebView のコンテンツ サイズを決定する方法が見つかりません。
私の Web ビューはより大きな UIScrollView コンテナーに埋め込まれているため、Web ビューの理想的なサイズを決定する必要があります。これにより、フレームを変更して Web ビュー内でスクロールしなくてもすべての HTML コンテンツを表示できるようになり、スクロール ビュー コンテナーの正しい高さを設定できるようになります (scrollview.contentSize を設定することにより)。
sizeToFit と sizeThatFits を試しましたが成功しませんでした。WKWebView インスタンスを作成し、それをコンテナーのスクロールビューに追加する私のコードは次のとおりです。
// self.view is a UIScrollView sized to something like 320.0 x 400.0.
CGRect wvFrame = CGRectMake(0, 0, self.view.frame.size.width, 100.0);
self.mWebView = [[[WKWebView alloc] initWithFrame:wvFrame] autorelease];
self.mWebView.navigationDelegate = self;
self.mWebView.scrollView.bounces = NO;
self.mWebView.scrollView.scrollEnabled = NO;
NSString *s = ... // Load s from a Core Data field.
[self.mWebView loadHTMLString:s baseURL:nil];
[self.view addSubview:self.mWebView];
以下は、実験的な didFinishNavigation メソッドです。
- (void)webView:(WKWebView *)aWebView
didFinishNavigation:(WKNavigation *)aNavigation
{
CGRect wvFrame = aWebView.frame;
NSLog(@"original wvFrame: %@\n", NSStringFromCGRect(wvFrame));
[aWebView sizeToFit];
NSLog(@"wvFrame after sizeToFit: %@\n", NSStringFromCGRect(wvFrame));
wvFrame.size.height = 1.0;
aWebView.frame = wvFrame;
CGSize sz = [aWebView sizeThatFits:CGSizeZero];
NSLog(@"sizeThatFits A: %@\n", NSStringFromCGSize(sz));
sz = CGSizeMake(wvFrame.size.width, 0.0);
sz = [aWebView sizeThatFits:sz];
NSLog(@"sizeThatFits B: %@\n", NSStringFromCGSize(sz));
}
そして、生成される出力は次のとおりです。
2014-12-16 17:29:38.055 App[...] original wvFrame: {{0, 0}, {320, 100}}
2014-12-16 17:29:38.055 App[...] wvFrame after sizeToFit: {{0, 0}, {320, 100}}
2014-12-16 17:29:38.056 App[...] wvFrame after sizeThatFits A: {320, 1}
2014-12-16 17:29:38.056 App[...] wvFrame after sizeThatFits B: {320, 1}
sizeToFit 呼び出しは効果がなく、sizeThatFits は常に高さ 1 を返します。