Heim > Fragen und Antworten > Hauptteil
Wie im Bild gezeigt:
Der rote Kastenteil ist WKWebView, der linke Teil ist die normale Anzeige und der rechte Teil ist die abnormale Anzeige.
Ich habe den hochadaptiven Webview-Inhalt im Rückruf zum Abschluss des Ladens der Webseite ausgeführt:
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
if ([webView isFinishLoading] == YES) {
self.webView.height = self.webView.scrollView.contentSize.height;
Die auf der linken und rechten Seite erhaltene Höhe ist gleich, die rechte Seite wird jedoch nicht vollständig angezeigt und ist ebenfalls vergrößert.
Was mich am meisten verwirrt, ist, dass der Ladevorgang manchmal vollständig und manchmal unvollständig ist.
Was mich noch mehr verwirrt, ist, dass die Anzeige zu diesem Zeitpunkt wieder korrekt ist, wenn ich einen Lazy Load schreibe, um ihn um eine Sekunde zu verzögern:
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
if ([webView isFinishLoading] == YES) {
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 1秒后异步执行这里的代码...
weakSelf.webView.height = weakSelf.webView.scrollView.contentSize.height;
Wenn ich UIWebView anstelle von WKWebView verwende, tritt dieses Problem nicht auf.
Kann mir jemand sagen, warum die Seite manchmal nicht vollständig angezeigt wird? . . Vielen Dank im Voraus
代言2017-07-06 10:37:34
这种情况我也遇到过, 偶尔会出现页面内容显示不全的情况. 后来发现didFinishNavigation
有时候会调用多次, 而第一次的时候webView.scrollView.contentSize
打印为(width = 0, height =0). 所以在isFinishLoading
后, 直接设置webView.height
就会出现内容不全.
解决:
判断webView.scrollView.contentSize.height
为非0, 再设置webView.height
; 或者用KVO
监听webView.scrollView.contentSize
的值变化. 这两种都可以.
判断高度
if (!self.webView.isLoading) {
if(webView.scrollView.contentSize.height > 0)
{
self.webView.height = self.webView.scrollView.contentSize.height;
[self.webView sizeToFit];
}
}
KVO监听contentSize
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (!self.webView.isLoading) {
if([keyPath isEqualToString:@"scrollView.contentSize"])
{
webView.height = webView.scrollView.contentSize.height;
[webView sizeToFit];
}
}
}