diff --git a/src/webui/www/private/css/Window.css b/src/webui/www/private/css/Window.css
index f774d6910..1f491fdcf 100644
--- a/src/webui/www/private/css/Window.css
+++ b/src/webui/www/private/css/Window.css
@@ -375,4 +375,20 @@ div.mochaToolbarWrapper.bottom {
 .mochaMaximizeButton.replaced,
 .mochaCloseButton.replaced {
 	background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) !important;
-}
\ No newline at end of file
+}
+
+/* iOS iframe scrolling */
+.windowFrame .mochaContentWrapper {
+    /* scroll the Window content. !important required. */
+    overflow: auto !important;
+    -webkit-overflow-scrolling: touch;
+}
+
+.windowFrame .mochaContent {
+    height: 100%;
+}
+
+.windowFrame iframe {
+    /* fix double scroll bar by reducing frame height. !important required. */
+    height: calc(100% - 5px) !important;
+}
diff --git a/src/webui/www/private/scripts/mocha-init.js b/src/webui/www/private/scripts/mocha-init.js
index 49da4325f..0b8a701cf 100644
--- a/src/webui/www/private/scripts/mocha-init.js
+++ b/src/webui/www/private/scripts/mocha-init.js
@@ -65,6 +65,7 @@ initializeWindows = function() {
             title: "QBT_TR(Download from URLs)QBT_TR[CONTEXT=downloadFromURL]",
             loadMethod: 'iframe',
             contentURL: 'download.html',
+            addClass: 'windowFrame', // fixes iframe scrolling on iOS Safari
             scrollbars: true,
             maximizable: false,
             closable: true,
@@ -112,6 +113,7 @@ initializeWindows = function() {
             title: "QBT_TR(Upload local torrent)QBT_TR[CONTEXT=HttpServer]",
             loadMethod: 'iframe',
             contentURL: 'upload.html',
+            addClass: 'windowFrame', // fixes iframe scrolling on iOS Safari
             scrollbars: true,
             maximizable: false,
             paddingVertical: 0,