[webview_flutter] Fix iOS WebView ignoring SafeArea widget and iOS 13 WebView scroll indicator showing at random location. (#2343)
diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md
index dfd288f..32ccc7c 100644
--- a/packages/webview_flutter/CHANGELOG.md
+++ b/packages/webview_flutter/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.3.19+4
+
+* On iOS, fix the scroll view content inset is automatically adjusted. After the fix, the content position of the WebView is customizable by Flutter.
+* Fix an iOS 13 bug where the scroll indicator shows at random location.
+
## 0.3.19+3
* Setup XCTests.
diff --git a/packages/webview_flutter/ios/Classes/FlutterWebView.m b/packages/webview_flutter/ios/Classes/FlutterWebView.m
index cfcfdaf..b1fc143 100644
--- a/packages/webview_flutter/ios/Classes/FlutterWebView.m
+++ b/packages/webview_flutter/ios/Classes/FlutterWebView.m
@@ -77,6 +77,13 @@
[weakSelf onMethodCall:call result:result];
}];
+ if (@available(iOS 11.0, *)) {
+ _webView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+ if (@available(iOS 13.0, *)) {
+ _webView.scrollView.automaticallyAdjustsScrollIndicatorInsets = NO;
+ }
+ }
+
[self applySettings:settings];
// TODO(amirh): return an error if apply settings failed once it's possible to do so.
// https://github.com/flutter/flutter/issues/36228
diff --git a/packages/webview_flutter/ios/Tests/FLTWebViewTests.m b/packages/webview_flutter/ios/Tests/FLTWebViewTests.m
index 5caea96..a545fd7 100644
--- a/packages/webview_flutter/ios/Tests/FLTWebViewTests.m
+++ b/packages/webview_flutter/ios/Tests/FLTWebViewTests.m
@@ -35,4 +35,33 @@
XCTAssertNotNil(factory);
}
+- (void)webViewContentInsetBehaviorShouldBeNeverOnIOS11 {
+ if (@available(iOS 11, *)) {
+ FLTWebViewController *controller =
+ [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400)
+ viewIdentifier:1
+ arguments:nil
+ binaryMessenger:self.mockBinaryMessenger];
+ UIView *view = controller.view;
+ XCTAssertTrue([view isKindOfClass:WKWebView.class]);
+ WKWebView *webView = (WKWebView *)view;
+ XCTAssertEqual(webView.scrollView.contentInsetAdjustmentBehavior,
+ UIScrollViewContentInsetAdjustmentNever);
+ }
+}
+
+- (void)webViewScrollIndicatorAticautomaticallyAdjustsScrollIndicatorInsetsShouldbeNoOnIOS13 {
+ if (@available(iOS 13, *)) {
+ FLTWebViewController *controller =
+ [[FLTWebViewController alloc] initWithFrame:CGRectMake(0, 0, 300, 400)
+ viewIdentifier:1
+ arguments:nil
+ binaryMessenger:self.mockBinaryMessenger];
+ UIView *view = controller.view;
+ XCTAssertTrue([view isKindOfClass:WKWebView.class]);
+ WKWebView *webView = (WKWebView *)view;
+ XCTAssertFalse(webView.scrollView.automaticallyAdjustsScrollIndicatorInsets);
+ }
+}
+
@end
diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml
index 0566552..e528e8d 100644
--- a/packages/webview_flutter/pubspec.yaml
+++ b/packages/webview_flutter/pubspec.yaml
@@ -1,6 +1,6 @@
name: webview_flutter
description: A Flutter plugin that provides a WebView widget on Android and iOS.
-version: 0.3.19+3
+version: 0.3.19+4
homepage: https://github.com/flutter/plugins/tree/master/packages/webview_flutter
environment: