Документ UIWebView остается высотой самого высокого содержимого - PullRequest
1 голос
/ 03 января 2011

Я загружаю контент в UIWebView с помощью следующего вызова:

NSString *detailHtmlString = [NSString stringWithFormat:@"<html><head><style>body {background: black;color: white;line-height: 1.4em; font-family: sans-serif; margin: 0; padding: 0 0 30px 0;width: 280px;} p {margin-top: 10px;}</style></head><body id=\"content\">%@</body></html>",[currentWeek objectForKey:@"post_content"]];
[weekDetailController.movie_detail loadHTMLString:detailHtmlString baseURL:nil];

Затем, после того, как он заканчивает загрузку:

- (void) webViewDidFinishLoad:(UIWebView *)sender {
    [self performSelector:@selector(calculateWebViewSize) withObject:nil afterDelay:0.1];
}

- (void) calculateWebViewSize {

    [weekDetailController.movie_detail sizeToFit];
    float newHeight = [[weekDetailController.movie_detail stringByEvaluatingJavaScriptFromString :@"document.getElementById(\"content\").offsetHeight"] floatValue];


    newHeight += 300; //height of the other elements
    NSLog(@"Height: %f",newHeight);

    CGRect frame = weekDetailController.movie_detail.frame;

    NSLog(@"Height was: %f",frame.size.height);

    frame.size.height = newHeight;

    weekDetailController.movie_detail.frame = frame;

    [scrollView.scrollView setContentOffset:CGPointZero];
    [scrollView.scrollView setContentSize:CGSizeMake(frame.size.width, frame.size.height)];
}

Это прекрасно работает при первом просмотрезагружается, но в последующих представлениях, когда в UIWebView загружается другое содержимое (с использованием того же вызова, что и выше), вызов JavaScript для получения высоты возвращает все большее и большее значения - даже если содержимое меньше, оно по-прежнему возвращаетвысота наибольшего количества контента, который был в представлении в какой-то момент.Я попытался загрузить пустую строку HTML в представление, чтобы «очистить» ее, но это, похоже, тоже не помогает.

Любые подсказки приветствуются!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2018

При использовании вложенных UIWebViews с Ограничениями необходимо сбросить ограничение (например, до 1) и перезагрузить веб-представление впоследствии:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, coordinator.transitionDuration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    self.webViewHeightConstraint.constant = 1;
    [self reloadWebView]; //[self.webview reload] doesn't work here, simply load with the given url or given html content
});
0 голосов
/ 03 января 2011
[scrollView.scrollView setContentOffset:pt];
[scrollView.scrollView setContentSize:CGSizeMake(frame.size.width, frame.size.height)];

Используете ли вы вложенные UIScrollViews?Возможно, вы устанавливаете только размер внутреннего вида прокрутки и оставляете внешний вид прокрутки равным наибольшему размеру его содержимого.

Редактирование:

Также следует просто использовать [scrollView.scrollView setContentOffset:CGPointZero];

...