From d9be0df11ee7c3350174dee542dbd0ae8e22e08a Mon Sep 17 00:00:00 2001 From: dequanzhu <147280593@qq.com> Date: Tue, 11 Jun 2019 13:55:14 +0800 Subject: [PATCH] fix iOS13 strange behavior --- HybridPageKit.podspec | 2 +- .../Source/HPKDefaultWebViewControl.m | 16 ++++++++++++++++ .../HybridPageKit/Source/HPKScrollProcessor.m | 18 ++++++++++++++++++ .../HybridPageKit/Source/_HPKUtils.h | 5 +++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/HybridPageKit.podspec b/HybridPageKit.podspec index b528a56..c1c78d6 100644 --- a/HybridPageKit.podspec +++ b/HybridPageKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "HybridPageKit" - s.version = "1.1" + s.version = "1.2" s.summary = "A high-performance、high-extensibility、easy integration framework for Hybrid content page. Support most content page types of News App." s.homepage = "https://github.com/dequan1331/HybridPageKit" s.license = "MIT" diff --git a/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKDefaultWebViewControl.m b/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKDefaultWebViewControl.m index 770bc5d..3bf0d63 100644 --- a/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKDefaultWebViewControl.m +++ b/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKDefaultWebViewControl.m @@ -51,6 +51,9 @@ @implementation HPKDefaultWebViewControl - (void)dealloc { HPKInfoLog(@"HPKDefaultWebViewControl dealloc with webview contentSize: %@, invalid: %@", NSStringFromCGSize(self.defaultWebView.scrollView.contentSize), @(self.defaultWebView.invalidForReuse)); [[HPKWebViewPool sharedInstance] enqueueWebView:self.defaultWebView]; + if(isiOS13Beta1){ + [_defaultWebView.scrollView safeRemoveObserver:self keyPath:@"scrollEnabled"]; + } } - (instancetype)initWithDetailHandler:(HPKPageHandler *)detailHandler @@ -120,6 +123,19 @@ - (void)_commonInitWebView { _defaultWebView = [[HPKWebViewPool sharedInstance] dequeueWebViewWithClass:self.webViewClass webViewHolder:self]; _defaultWebView.frame = CGRectMake(0, 0, self.handler.containerScrollView.frame.size.width, self.handler.containerScrollView.frame.size.height); _defaultWebView.scrollView.scrollEnabled = NO; + + // iOS13Beta1 WKWebView change scrollView scrollEnabled automaticlly in ‘WKWebView _didCommitLayerTree:’ + // remove later + if(isiOS13Beta1){ + __weak typeof(self)_self = self; + [_defaultWebView.scrollView safeAddObserver:self keyPath:@"scrollEnabled" callback:^(NSObject *oldValue, NSObject *newValue) { + __strong typeof(_self) self = _self; + BOOL scrollEnabled = ((NSNumber *)newValue).boolValue; + if(scrollEnabled){ + self.defaultWebView.scrollView.scrollEnabled = NO; + } + }]; + } } #pragma mark - HPKControllerProtocol diff --git a/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKScrollProcessor.m b/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKScrollProcessor.m index 302e3d9..d2a5dc6 100644 --- a/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKScrollProcessor.m +++ b/HybridPageKit/HybridPageKit/HybridPageKit/Source/HPKScrollProcessor.m @@ -334,6 +334,7 @@ - (__kindof UIView *)_dequeueViewOfModel:(HPKModel *)model { if (view) { if (![view isDescendantOfView:_scrollView]) { [_scrollView addSubview:view]; + [self _bringScrollViewIndicatorToFront]; } [_onScrollViewComponentViews setObject:view forKey:componentIndex]; } else { @@ -344,6 +345,7 @@ - (__kindof UIView *)_dequeueViewOfModel:(HPKModel *)model { view = [[HPKCommonViewPool sharedInstance] dequeueComponentViewWithClass:viewCls]; [view setComponentViewId:componentIndex]; [_scrollView addSubview:view]; + [self _bringScrollViewIndicatorToFront]; [_onScrollViewComponentViews setObject:view forKey:componentIndex]; } else { [[HPKCommonViewPool sharedInstance] resetVisibleComponentViewState:view]; @@ -495,6 +497,22 @@ - (void)_scrollToContentOffset:(CGPoint)toContentOffset animated:(BOOL)animated HPKInfoLog(@"HPKScrollProcessor has scrollto offsety:%@",@(y)); } +- (void)_bringScrollViewIndicatorToFront { + for(__kindof UIView *subView in _scrollView.subviews){ + // before iOS13 indicator is UIImageView + Class indicatorClass; + if (@available(iOS 13, *)) { + indicatorClass = NSClassFromString([NSString stringWithFormat:@"%@%@%@",@"_UIScrollViewSc",@"rollIn",@"dicator"]); + }else{ + indicatorClass = [UIImageView class]; + } + // bring scroll indicator to front + if (indicatorClass && [subView isKindOfClass:indicatorClass]) { + [_scrollView bringSubviewToFront:subView]; + } + } +} + #pragma mark - #pragma mark - #pragma mark - public diff --git a/HybridPageKit/HybridPageKit/HybridPageKit/Source/_HPKUtils.h b/HybridPageKit/HybridPageKit/HybridPageKit/Source/_HPKUtils.h index 02be168..4a54500 100644 --- a/HybridPageKit/HybridPageKit/HybridPageKit/Source/_HPKUtils.h +++ b/HybridPageKit/HybridPageKit/HybridPageKit/Source/_HPKUtils.h @@ -49,4 +49,9 @@ typedef void (^HPKKVOCallback)(NSObject *oldValue, NSObject *newValue); - (void)safeRemoveAllObserver; @end +#pragma mark - + +#define isiOS13Beta1 \ + ([@"13.0" isEqualToString:[[UIDevice currentDevice] systemVersion]]) + #endif /* _HPKUtils_h */