Я экспериментирую с заменой динамически распределенного экземпляра UIWebView экземпляром WKWebView при работе под iOS 8 и новее, и я не могу найти способ определить размер содержимого WKWebView.
Мой веб-просмотр встроен в большой контейнер UIScrollView, поэтому мне нужно определить идеальный размер для веб-представления. Это позволит мне изменить свой фрейм, чтобы показать весь его контент HTML, без необходимости прокрутки в веб-представлении, и я смогу установить правильную высоту для контейнера просмотра прокрутки (путем установки scrollview.contentSize).
Я пробовал размерToFit и 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.