From 984ecc8879746b2fa64df716e44e44a43addaef0 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Thu, 17 Jun 2021 23:12:28 -0400 Subject: [PATCH] Change VoiceOver focus after jumping from table of contents Fixes #6 --- Gemini-iOS/BrowserWebViewController.swift | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Gemini-iOS/BrowserWebViewController.swift b/Gemini-iOS/BrowserWebViewController.swift index 6fa8dfb..f293a96 100644 --- a/Gemini-iOS/BrowserWebViewController.swift +++ b/Gemini-iOS/BrowserWebViewController.swift @@ -283,11 +283,21 @@ class BrowserWebViewController: UIViewController { let y = result * scrollView.zoomScale - scrollView.safeAreaInsets.top let maxY = scrollView.contentSize.height - scrollView.bounds.height + scrollView.safeAreaInsets.bottom let finalOffsetY = min(y, maxY) - self.webView.scrollView.setContentOffset(CGPoint(x: 0, y: finalOffsetY), animated: true) + UIView.animate(withDuration: 0.25, delay: 0, options: []) { + self.webView.scrollView.setContentOffset(CGPoint(x: 0, y: finalOffsetY), animated: false) + } completion: { _ in + // calling focus() causes VoiceOver to move to that element + self.webView.evaluateJavaScript("document.getElementById('l\(index)').focus();") + } } } else { - webView.evaluateJavaScript("document.getElementById('l\(index)').scrollIntoView();") + webView.evaluateJavaScript(""" + const el = document.getElementById('l\(index)'); + el.scrollIntoView(); + el.focus(); + """) } + } private static let preamble = """