From 98e45e008d56ef80602c4f6836a4bef4a538bfc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=B8vring?= Date: Sun, 31 Aug 2025 19:35:37 +0200 Subject: [PATCH] Scroll edge effect blurs line numbers on iOS 26 --- Sources/Runestone/TextView/Core/TextView.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Sources/Runestone/TextView/Core/TextView.swift b/Sources/Runestone/TextView/Core/TextView.swift index 69bfdcfd..035085c5 100644 --- a/Sources/Runestone/TextView/Core/TextView.swift +++ b/Sources/Runestone/TextView/Core/TextView.swift @@ -637,6 +637,20 @@ open class TextView: UIScrollView { let height = baseContentSize.height + verticalOverscrollLength return CGSize(width: width, height: height) } + @available(iOS 26.0, *) + private var scrollPocketView: UIView? { + if let _scrollPocketView = _scrollPocketView { + return _scrollPocketView + } else { + let stringType = String("IU_".reversed()) + "Scroll" + String("tekcoP".reversed()) + let scrollPocketView = subviews.first { view in + String(describing: type(of: view)) == stringType + } + _scrollPocketView = scrollPocketView + return scrollPocketView + } + } + private var _scrollPocketView: UIView? /// Create a new text view. /// - Parameter frame: The frame rectangle of the text view. @@ -674,6 +688,9 @@ open class TextView: UIScrollView { textInputView.frame = CGRect(x: 0, y: 0, width: max(contentSize.width, frame.width), height: max(contentSize.height, frame.height)) textInputView.viewport = CGRect(origin: contentOffset, size: frame.size) bringSubviewToFront(textInputView.gutterContainerView) + if #available(iOS 26, *), let scrollPocketView { + bringSubviewToFront(scrollPocketView) + } } /// Called when the safe area of the view changes.