Skip to content

Commit 4bbc57a

Browse files
committed
iOS: Use performSelector for scrollView of webView
- Fixes deprecation warning of direct property access of webView.scrollView in cordova-ios 8.x. Cordova will remove the scrollView property added as a global category extension to UIView in the future.
1 parent c981b75 commit 4bbc57a

File tree

2 files changed

+46
-23
lines changed

2 files changed

+46
-23
lines changed

src/ios/GoogleMaps/CordovaGoogleMaps.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,12 @@ - (void) didRotate:(id)sender {
114114

115115

116116
-(void)viewDidLayoutSubviews {
117-
[self.pluginLayer.pluginScrollView setContentSize: self.webView.scrollView.contentSize];
117+
// Update contentSize of pluginScrollView to match the scrollView of the WebView
118+
if ([self.webView respondsToSelector:@selector(scrollView)]) {
119+
UIScrollView *webViewScrollView = [self.webView performSelector:@selector(scrollView)];
120+
self.pluginLayer.pluginScrollView.contentSize = webViewScrollView.contentSize;
121+
}
122+
118123
[self.pluginLayer.pluginScrollView flashScrollIndicators];
119124
}
120125

src/ios/GoogleMaps/MyPluginLayer.m

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ - (id)initWithWebView:(UIView *)webView {
3636
[self.webView removeFromSuperview];
3737
// prevent webView from bouncing
3838
if ([self.webView respondsToSelector:@selector(scrollView)]) {
39-
((UIScrollView*)[self.webView scrollView]).bounces = NO;
39+
((UIScrollView*)[self.webView performSelector:@selector(scrollView)]).bounces = NO;
4040
} else {
4141
for (id subview in [self.webView subviews]) {
4242
if ([[subview class] isSubclassOfClass:[UIScrollView class]]) {
@@ -48,12 +48,14 @@ - (id)initWithWebView:(UIView *)webView {
4848
self.pluginScrollView = [[MyPluginScrollView alloc] initWithFrame:[self.webView frame]];
4949

5050
self.pluginScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
51-
52-
self.pluginScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
53-
UIView *uiview = self.webView;
54-
uiview.scrollView.delegate = self;
55-
[self.pluginScrollView setContentSize:self.webView.scrollView.frame.size ];
56-
51+
52+
// Set webview delegate to MyPluginLayer and set contentSize of pluginScrollView to match the one of webView
53+
if ([self.webView respondsToSelector:@selector(scrollView)]) {
54+
UIScrollView *webViewScrollView = [self.webView performSelector:@selector(scrollView)];
55+
webViewScrollView.delegate = self;
56+
self.pluginScrollView.contentSize = webViewScrollView.frame.size;
57+
}
58+
5759
[self addSubview:self.pluginScrollView];
5860

5961
[self addSubview:self.webView];
@@ -90,18 +92,24 @@ - (void)stopRedrawTimer {
9092
}
9193
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
9294
{
93-
CGPoint offset = self.webView.scrollView.contentOffset;
94-
self.pluginScrollView.contentOffset = offset;
95+
[self syncPluginScrollViewContentOffsetWithWebViewScrollView];
9596
}
9697

9798
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
98-
CGPoint offset = self.webView.scrollView.contentOffset;
99-
self.pluginScrollView.contentOffset = offset;
99+
[self syncPluginScrollViewContentOffsetWithWebViewScrollView];
100100
}
101101
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
102-
CGPoint offset = self.webView.scrollView.contentOffset;
103-
self.pluginScrollView.contentOffset = offset;
102+
[self syncPluginScrollViewContentOffsetWithWebViewScrollView];
104103
}
104+
105+
// Syncs pluginScrollView.contentOffset with webView.scrollView.contentOffset
106+
- (void)syncPluginScrollViewContentOffsetWithWebViewScrollView {
107+
if ([self.webView respondsToSelector:@selector(scrollView)]) {
108+
UIScrollView *webViewScrollView = [self.webView performSelector:@selector(scrollView)];
109+
self.pluginScrollView.contentOffset = webViewScrollView.contentOffset;
110+
}
111+
}
112+
105113
- (void)clearHTMLElements {
106114
@synchronized(self.pluginScrollView.HTMLNodes) {
107115
NSMutableDictionary *domInfo;
@@ -229,13 +237,16 @@ - (void)resizeTask:(NSTimer *)timer {
229237
}
230238

231239
- (void)updateViewPosition:(PluginViewController *)pluginViewCtrl {
232-
CGFloat zoomScale = self.webView.scrollView.zoomScale;
233-
[self.pluginScrollView setFrame:self.webView.frame];
234-
235-
CGPoint offset = self.webView.scrollView.contentOffset;
236-
offset.x *= zoomScale;
237-
offset.y *= zoomScale;
238-
[self.pluginScrollView setContentOffset:offset];
240+
if (![self.webView respondsToSelector:@selector(scrollView)]) return;
241+
242+
[self.pluginScrollView setFrame:self.webView.frame];
243+
244+
UIScrollView *webViewScrollView = [self.webView performSelector:@selector(scrollView)];
245+
CGFloat zoomScale = webViewScrollView.zoomScale;
246+
CGPoint offset = webViewScrollView.contentOffset;
247+
offset.x *= zoomScale;
248+
offset.y *= zoomScale;
249+
[self.pluginScrollView setContentOffset:offset];
239250

240251
if (!pluginViewCtrl.divId) {
241252
return;
@@ -376,8 +387,15 @@ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
376387
return [self.webView hitTest:browserClickPoint withEvent:event];
377388
}
378389

379-
float offsetX = self.webView.scrollView.contentOffset.x;
380-
float offsetY = self.webView.scrollView.contentOffset.y;
390+
float offsetX = 0;
391+
float offsetY = 0;
392+
393+
// Take contentOffset.x and .y from webView.scrollView
394+
if ([self.webView respondsToSelector:@selector(scrollView)]) {
395+
UIScrollView *webViewScrollView = [self.webView performSelector:@selector(scrollView)];
396+
offsetX = webViewScrollView.contentOffset.x;
397+
offsetY = webViewScrollView.contentOffset.y;
398+
}
381399

382400
float webviewWidth = self.webView.frame.size.width;
383401
float webviewHeight = self.webView.frame.size.height;

0 commit comments

Comments
 (0)