xiubojin / JXBWKWebView

An component WebView for iOS base on WKWebView
MIT License
735 stars 115 forks source link

webview复用问题,复用的webview是嵌套在tableview中的偶尔会出现空白,导致UI错乱。。还有偶尔因为masonry找不到superView而崩溃。 #80

Closed zeku2022 closed 4 years ago

zeku2022 commented 4 years ago

蛋疼了。。。复用后加载速度确实快了,但是这些不稳定因素怎么解决?不能再次加载空白

复用加载后,会出现这个情况,webVIew错乱了。可能高度为0. image

打断点在这个方法时,会崩溃。。

//被回收
- (void)webViewEndReuse{
...
    [self loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:kWKWebViewReuseUrlString]]];
....
}

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'couldn't find a common superview for <JXBWKWebView: 0x7fb0650d1800; frame = (5 377.5; 355 400); opaque = NO; layer = <CAGradientLayer: 0x60000043c220>> and <GKLDTestAdvertDetailTopView: 0x7fb06b500aa0; frame = (0 0; 375 0); layer = <CAGradientLayer: 0x60400223d3c0>>'

xiubojin commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

zeku2022 commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

是放在tableHeaderView里面,对了顺便请问下,为啥放在tableHeaderView里面的包含WKWebView的自定义View无法释放...

xiubojin commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

是放在tableHeaderView里面,对了顺便请问下,为啥放在tableHeaderView里面的包含WKWebView的自定义View无法释放...

因为WKWebView实例被回收的时候不会被销毁,而是放到复用池,所以放在webview上的实例无法释放。

另外,你把WebView放到Header里,是要动态计算WebView内容的高度然后把HeaderView的高度撑开的吧?

zeku2022 commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

是放在tableHeaderView里面,对了顺便请问下,为啥放在tableHeaderView里面的包含WKWebView的自定义View无法释放...

因为WKWebView实例被回收的时候不会被销毁,而是放到复用池,所以放在webview上的实例无法释放。

另外,你把WebView放到Header里,是要动态计算WebView内容的高度然后把HeaderView的高度撑开的吧?

嗯嗯 是的 ,感觉这种撑开要多次设置headerview,总是会存在各种问题...

xiubojin commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

是放在tableHeaderView里面,对了顺便请问下,为啥放在tableHeaderView里面的包含WKWebView的自定义View无法释放...

因为WKWebView实例被回收的时候不会被销毁,而是放到复用池,所以放在webview上的实例无法释放。 另外,你把WebView放到Header里,是要动态计算WebView内容的高度然后把HeaderView的高度撑开的吧?

嗯嗯 是的 ,感觉这种撑开要多次设置headerview,总是会存在各种问题...

这么用WebView就会遇到这种情况,而且计算的高度并不准确,不建议这么用。

zeku2022 commented 4 years ago

嵌套在TableView中是怎么用的?是放到Cell里面?能发下层级图吗?

是放在tableHeaderView里面,对了顺便请问下,为啥放在tableHeaderView里面的包含WKWebView的自定义View无法释放...

因为WKWebView实例被回收的时候不会被销毁,而是放到复用池,所以放在webview上的实例无法释放。 另外,你把WebView放到Header里,是要动态计算WebView内容的高度然后把HeaderView的高度撑开的吧?

嗯嗯 是的 ,感觉这种撑开要多次设置headerview,总是会存在各种问题...

这么用WebView就会遇到这种情况,而且计算的高度并不准确,不建议这么用。

好的 谢谢