Я использую 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;
Где вы называете свой код? Для меня он возвращает 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
}