Подтвердить что ты не робот

Как установить высоту UIWebView на основе содержимого html?

Я хочу установить высоту UIWebview на основе содержимого HTML. Я получаю размер строки, но не получаю фактический размер из-за абзаца, полужирного шрифта, другого размера шрифта и т.д.

4b9b3361

Ответ 1

Обычно я использую эти методы, чтобы установить кадр UIWebview как размер содержимого:

- (void)webViewDidStartLoad:(UIWebView *)webView {
    CGRect frame = webView.frame;
    frame.size.height = 5.0f;
    webView.frame = frame;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    CGSize mWebViewTextSize = [webView sizeThatFits:CGSizeMake(1.0f, 1.0f)]; // Pass about any size
    CGRect mWebViewFrame = webView.frame;
    mWebViewFrame.size.height = mWebViewTextSize.height;
    webView.frame = mWebViewFrame;

    //Disable bouncing in webview
    for (id subview in webView.subviews) {
        if ([[subview class] isSubclassOfClass: [UIScrollView class]]) {
            [subview setBounces:NO];
        }
    }
}

Они автоматически вызывается (если вы установите делегат webView этому классу), когда webView завершил загрузку содержимого.

Ответ 2

Ну, у каждого веб-представления есть встроенный UIScrollView, поэтому я бы попытался дождаться загрузки страницы, а затем нажав на свойство прокрутки viewSize, чтобы получить высоту страницы.

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    CGFloat height = webView.scrollView.contentSize.height;
}

Ответ 3

Попробуйте этот код

- (void)webViewDidFinishLoad:(UIWebView *)webView
{     
    height= [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
}

Ответ 4

- (void)viewDidLoad
{
    [super viewDidLoad];
    webview.delegate = self;
    [webview loadHTMLString:@"<div id='foo' style='background: red'>The quick brown fox jumped over the lazy dog.</div>" baseURL:nil];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *output = [webview stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"foo\").offsetHeight;"];
    NSLog(@"height: %@", output);
}

см. также Как определить высоту интерфейса UIWebView на основе содержимого с переменной высотой UITableView?

Рассчитать высоту интерфейса UIWebView в зависимости от ее содержимого

Ответ 5

Если у вас есть webview в tableviewcell, heightForRowAtIndexPath устанавливает высоту ячейки в высоту размера NSAttributedString следующим образом.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{


    NSAttributedString *attributedText = [NSString  getHTMLAttributedString:@"HTML Content"];
    CGSize size = CGSizeMake(300, CGFLOAT_MAX);
    CGRect paragraphRect =     [attributedText boundingRectWithSize:size
                                 options:(NSStringDrawingUsesLineFragmentOrigin)
                                 context:nil];
    return paragraphRect.size.height;
}

+(NSAttributedString *) getHTMLAttributedString:(NSString *) string{
    NSError *errorFees=nil;
    NSString *sourceFees = [NSString stringWithFormat:
                            @"<span style=\"font-family: 'Roboto-Light';font-size: 14px\">%@</span>",string];
    NSMutableAttributedString* strFees = [[NSMutableAttributedString alloc] initWithData:[sourceFees dataUsingEncoding:NSUTF8StringEncoding]
                                                                                 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                                                                                           NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]}
                                                                      documentAttributes:nil error:&errorFees];
    return strFees;

}