iphone - type - wkwebview
¿Cómo establecer la altura de UIWebView en función del contenido html? (5)
Quiero establecer la altura de UIWebview en función del contenido HTML. Obtengo el tamaño de una cadena, pero no obtengo el tamaño real debido al párrafo, negrita, diferente tamaño de fuente, etc.
Bueno, cada vista web tiene un UIScrollView incorporado, así que intentaría esperar a que se cargue la página y luego tocar la propiedad contentSize de la vista de desplazamiento para obtener la altura de la página.
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
CGFloat height = webView.scrollView.contentSize.height;
}
Prueba este codigo
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
height= [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"] floatValue];
}
Si tiene webview en tableviewcell, en heightForRowAtIndexPath establezca la altura de la celda a la altura del tamaño NSAttributedString de la siguiente manera.
-(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;
}
Normalmente utilizo estos métodos para establecer el marco UIWebview
como su tamaño de contenido:
- (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];
}
}
}
Se llaman automáticamente (si configura el delegado de webView
a esta clase), cuando WebView
ha terminado de cargar su contenido.
- (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);
}
Consulte también ¿Cómo determinar la altura de UIWebView en función del contenido, dentro de una altura variable UITableView?