Получите общую высоту содержания webView использование JavaScript

Я использую a UIWebView для отображения содержания, в форме строки HTML – не веб-сайт, выше, чем экран iPhone, не будучи должен прокрутить в самом webView, оставляя это родителю scrollView.

Для достижения этого мне нужен способ получить общий размер документа, включая область с возможностью прокрутки, установить высоту webView. Я попробовал много различных решений JavaScript:

(document.height !== undefined) ? document.height : document.body.offsetHeight // Returns height of UIWebView
document.body.offsetHeight // Returns zero
document.body.clientHeight // Returns zero
document.documentElement.clientHeight // Returns height of UIWebView
window.innerHeight // Returns height of UIWebView -2
document.body.scrollHeight // Returns zero

Существует ли решение, которое на самом деле работает?

Текущий (нерабочий) код:

[[[self.singlePost.contentText subviews] lastObject] setScrollEnabled:NO];
int content_height = [[self.singlePost.contentText stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue];
NSLog(@"Content_height: %d", content_height);
CGRect rect = self.singlePost.contentText.frame;
rect.size.height = content_height;
self.singlePost.contentText.frame = rect;
9
задан Emil 7 February 2013 в 21:07
поделиться

1 ответ

Где вы называете свой код? Для меня он возвращает 0, если он вызывается сразу после метода loadHTMLString. Если я вызываю его в (void) webViewDidFinishLoad: (UIWebView *) делегатеWebView, я получаю допустимое значение.

- (void)loadHTML: (NSString *)html {
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    webView.delegate = self;

    NSURL *resourceURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
    [webView loadHTMLString:html baseURL: resourceURL];
    NSLog(@"height: %d", [[webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] intValue]); // returns 0
  }

- (void)webViewDidFinishLoad:(UIWebView *)theWebView {
    NSLog(@"height: %@", [webView stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"]); //return 2166
}
6
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: