Das Problem ist, dass ich eine Tabellenansicht mit mehreren Zellen habe und ein WebView in einer dieser Zellen habe. Wenn ich den Scroll in der Webansicht deaktiviere, sollte ich eine statische Web-Inhaltsansicht haben, die in der tableView scrollt, nicht für sich selbst, was alles gut funktioniert. Im webViewDidFinishLoad Methode I rufenUIWebView "document.height" Auswertung gibt falsche Höhe auf älteren iPhones zurück (speziell 4s und 5)
[[webView stringByEvaluatingJavaScriptFromString: @"document.height"] floatValue];
dann diesen Wert in heightForRowAtIndexPath eingestellt, indem der Tisch Nachladen. Alles funktioniert gut auf iPhone 6 und höher, aber auf 4s und 5, ist der Boden meiner Web-Inhalte abgeschnitten. Der zurückgegebene Höhenunterschied ist völlig zufällig, wobei 724 Pixelhöhe nicht geclippt und in Ordnung ist, bei anderen Inhalten mit nahezu derselben zurückgegebenen Pixelhöhe, die um mehr als 30% des Originals abgeschnitten ist.
Ich versuchte mehrere Ansätze, die ich hier fand, aber keiner von ihnen arbeitete. Versucht, den Maximalwert aus der Auswertung der Offsethöhe, Scrollhöhe und anderer Eigenschaften zu erhalten, aber auch ohne Erfolg. Auch versucht, jquery Befehle auf meinem Webview laufen, aber noch einmal, ohne Erfolg bisher. Wenn jemand Erfahrung mit einem Problem wie diesem hat, bitte helfen Sie. Der vollständige Code-Schnipsel, wobei "articleViewHeight" ist eine Einschränkung für die webView erwähnt:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return [self getCellHeight:indexPath.row];
}
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self getCellHeight:indexPath.row];
}
-(CGFloat)getCellHeight:(NSInteger)row{
switch (row) {
case 0:
return self.view.frame.size.height * 0.1f;
break;
case 1:
return self.view.frame.size.height * 0.375f;
break;
case 2:
return UITableViewAutomaticDimension;//self.view.frame.size.height * 0.15f;
break;
case 3:
return self.articleViewHeight;
break;
case 4:
return self.view.frame.size.height * 0.2f;
break;
default:
return UITableViewAutomaticDimension;
break;
}
}
- (void)webViewDidFinishLoad:(UIWebView * _Nonnull)webView{
CGFloat height = [self getWebViewPageHeight];
self.articleViewHeight = height;
[self.tableView reloadData];
[self removeLoader];
}
- (CGFloat) getWebViewPageHeight {
CGFloat height1 = [[self.articleView stringByEvaluatingJavaScriptFromString: @"document.height"] floatValue];
CGFloat height2 = [[self.articleView stringByEvaluatingJavaScriptFromString: @"document.body.scrollHeight"] floatValue];
return MAX(height1, height2);
}
Update: die htmlstring Ladecode als
-(void)doneLoading{
NSString *pathToFile =[[NSBundle mainBundle] pathForResource:@"news" ofType:@"css"];
NSString *fileString = [NSString stringWithContentsOfFile:pathToFile encoding:NSUTF8StringEncoding error:nil];
NSString* headerString = @"<!DOCTYPE html><html><head title='test'><style type=\"text/css\" media=\"all\">%@</style></head><body><div id='content'>%@</div></body></html>";
NSString * theString = [NSString stringWithFormat:headerString,fileString,self.htmlString];
[self.articleView loadHTMLString:theString baseURL:nil];
}
Ein umfangreicher Codeausschnitt wäre hilfreich, um Benutzern das Problem besser verständlich zu machen. – blundin
Ist die Sache, die Sie in einen Webview lokalen HTML-Inhalt laden oder tatsächliche, Online-Seite? – Kegluneq
Seine lokale, eine HTML-Zeichenfolge. – Netheril