web-dev-qa-db-fra.com

Comment définir la hauteur de UIWebView en fonction du contenu HTML?

Je souhaite définir la hauteur de UIWebview en fonction du contenu HTML. J'obtiens la taille d'une chaîne, mais pas la taille réelle à cause du paragraphe, du gras, de la taille de la police, etc.

18
KPIteng

J'utilise généralement ces méthodes pour définir le cadre UIWebview en fonction de la taille du contenu:

- (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];
        }
    }
}

Ils sont automatiquement appelés (si vous définissez le délégué de webView dans cette classe), lorsque WebView a fini de charger son contenu.

14
Guntis Treulands

Chaque vue Web contient une vue UIScrollView. J'attendrais donc le chargement de la page, puis vous appuyez sur la propriété contentSize de la vue de défilement pour obtenir la hauteur de la page.

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

Essayez ce code 

- (void)webViewDidFinishLoad:(UIWebView *)webView
{     
    height= [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
}
7
user1503659
- (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);
}

voir aussi Comment déterminer la hauteur de UIWebView en fonction du contenu, dans une hauteur variable UITableView?

Calcule la hauteur de UIWebView en fonction de son contenu

1
Venk

Si vous avez une vue Web dans uitableviewcell, dans heightForRowAtIndexPath, définissez la hauteur de la cellule sur la hauteur de la taille NSAttributedString comme suit.

-(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;

}
0
Rajan Twanabashu