diff --git a/web/index.css b/web/index.css
index df7d3674b37ef4411e45d4e5022a2b56bde71f7d..e3c85830686513cbf57dfbf344c0b0040724042e 100644
--- a/web/index.css
+++ b/web/index.css
@@ -46,6 +46,14 @@ div.pack-list, nav {
 div.pack-list {
   overflow-y: auto; }
 
+div.pack-list.ios-safari-hack {
+  position: fixed;
+  top: calc(12vw + 2px);
+  bottom: 0;
+  left: 0;
+  right: 0;
+  -webkit-overflow-scrolling: touch; }
+
 section.stickerpack {
   margin-top: .75rem; }
   section.stickerpack > div.sticker-list {
diff --git a/web/index.js b/web/index.js
index 6e4451e7ad6b5103dc45fb44d00e455fd3d7be22..921c591188eb9f2fd6a3d9872dccda6fdcb8f615 100644
--- a/web/index.js
+++ b/web/index.js
@@ -15,6 +15,9 @@ let HOMESERVER_URL = "https://matrix-client.matrix.org"
 
 const makeThumbnailURL = mxc => `${HOMESERVER_URL}/_matrix/media/r0/thumbnail/${mxc.substr(6)}?height=128&width=128&method=scale`
 
+// We need to detect iOS webkit because it has a bug related to scrolling non-fixed divs
+const isMobileSafari = navigator.userAgent.match(/(iPod|iPhone|iPad)/) && navigator.userAgent.match(/AppleWebKit/)
+
 class App extends Component {
 	constructor(props) {
 		super(props)
@@ -109,7 +112,7 @@ class App extends Component {
 			<nav>
 				${this.state.packs.map(pack => html`<${NavBarItem} id=${pack.id} pack=${pack}/>`)}
 			</nav>
-			<div class="pack-list" ref=${elem => this.packListRef = elem}>
+			<div class="pack-list ${isMobileSafari ? "ios-safari-hack" : ""}" ref=${elem => this.packListRef = elem}>
 				${this.state.packs.map(pack => html`<${Pack} id=${pack.id} pack=${pack}/>`)}
 			</div>
 		</main>`
diff --git a/web/index.sass b/web/index.sass
index 300c0c0a403779933b6e755860ef1917ab64c806..6f5ad4af8b1ea0b4eb8c1e1290a3b55bb419b374 100644
--- a/web/index.sass
+++ b/web/index.sass
@@ -64,6 +64,14 @@ div.pack-list, nav
 div.pack-list
   overflow-y: auto
 
+div.pack-list.ios-safari-hack
+  position: fixed
+  top: $nav-height
+  bottom: 0
+  left: 0
+  right: 0
+  -webkit-overflow-scrolling: touch
+
 section.stickerpack
   margin-top: .75rem