From fabb5cd257e3d5946da3ab88cb44f59bcb771030 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Wed, 5 Feb 2025 11:30:27 -0500 Subject: [PATCH] Prevent live text button from showing below gallery bottom controls --- ...mentWrapperGalleryContentViewController.swift | 4 ++++ .../ImageGalleryContentViewController.swift | 7 +++++++ .../LoadingGalleryContentViewController.swift | 16 ++++++++++++++++ .../GalleryVC/GalleryContentViewController.swift | 4 ++++ .../GalleryVC/GalleryItemViewController.swift | 11 +++++++++++ 5 files changed, 42 insertions(+) diff --git a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift index 02ead3c4..8d220e2d 100644 --- a/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift +++ b/Packages/ComposeUI/Sources/ComposeUI/Views/Attachments/AttachmentWrapperGalleryContentViewController.swift @@ -82,6 +82,10 @@ class AttachmentWrapperGalleryContentViewController: UIViewController, GalleryCo } } + func setInsetForBottomControls(_ inset: CGFloat) { + wrapped.setInsetForBottomControls(inset) + } + func galleryContentDidAppear() { wrapped.galleryContentDidAppear() } diff --git a/Packages/GalleryVC/Sources/GalleryVC/Content/ImageGalleryContentViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/Content/ImageGalleryContentViewController.swift index e24895af..2fb0b98e 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/Content/ImageGalleryContentViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/Content/ImageGalleryContentViewController.swift @@ -107,6 +107,13 @@ open class ImageGalleryContentViewController: UIViewController, GalleryContentVi analysisInteraction.setSupplementaryInterfaceHidden(!visible, animated: animated) } } + + public func setInsetForBottomControls(_ inset: CGFloat) { + if #available(iOS 16.0, macCatalyst 17.0, *), + let analysisInteraction { + analysisInteraction.supplementaryInterfaceContentInsets = UIEdgeInsets(top: 0, left: 0, bottom: inset, right: 0) + } + } } @available(iOS 16.0, macCatalyst 17.0, *) diff --git a/Packages/GalleryVC/Sources/GalleryVC/Content/LoadingGalleryContentViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/Content/LoadingGalleryContentViewController.swift index 82751d5a..f2b039bc 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/Content/LoadingGalleryContentViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/Content/LoadingGalleryContentViewController.swift @@ -31,6 +31,14 @@ public class LoadingGalleryContentViewController: UIViewController, GalleryConte wrapped?.presentationAnimation ?? .fade } + public var hideControlsOnZoom: Bool { + wrapped?.hideControlsOnZoom ?? true + } + + public var showBelowSafeArea: Bool { + wrapped?.showBelowSafeArea ?? true + } + public init(caption: String?, provider: @escaping () async -> (any GalleryContentViewController)?) { self.fallbackCaption = caption self.provider = provider @@ -105,6 +113,10 @@ public class LoadingGalleryContentViewController: UIViewController, GalleryConte wrapped?.setControlsVisible(visible, animated: animated, dueToUserInteraction: dueToUserInteraction) } + public func setInsetForBottomControls(_ inset: CGFloat) { + wrapped?.setInsetForBottomControls(inset) + } + public func galleryContentDidAppear() { wrapped?.galleryContentDidAppear() } @@ -113,4 +125,8 @@ public class LoadingGalleryContentViewController: UIViewController, GalleryConte wrapped?.galleryContentWillDisappear() } + public func galleryShouldBeginInteractiveDismiss() -> Bool { + wrapped?.galleryShouldBeginInteractiveDismiss() ?? true + } + } diff --git a/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift index a7af7034..397d3a65 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/GalleryContentViewController.swift @@ -22,6 +22,7 @@ public protocol GalleryContentViewController: UIViewController { func shouldHideControls() -> Bool func setControlsVisible(_ visible: Bool, animated: Bool, dueToUserInteraction: Bool) + func setInsetForBottomControls(_ inset: CGFloat) func galleryContentDidAppear() func galleryContentWillDisappear() func galleryShouldBeginInteractiveDismiss() -> Bool @@ -59,6 +60,9 @@ public extension GalleryContentViewController { func setControlsVisible(_ visible: Bool, animated: Bool, dueToUserInteraction: Bool) { } + func setInsetForBottomControls(_ inset: CGFloat) { + } + func galleryContentDidAppear() { } diff --git a/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift b/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift index a0c3a10a..64183a48 100644 --- a/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift +++ b/Packages/GalleryVC/Sources/GalleryVC/GalleryItemViewController.swift @@ -391,6 +391,17 @@ class GalleryItemViewController: UIViewController { scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: bottomInset, right: 0) scrollView.verticalScrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: bottomIndicatorInset, right: 0) + let contentBottomControlsInset: CGFloat + if content.showBelowSafeArea, + controlsVisible, + let bottomControlsView { + let contentFrameInSelf = content.view.convert(content.view.bounds, to: view) + contentBottomControlsInset = max(0, contentFrameInSelf.maxY - bottomControlsView.frame.minY - view.safeAreaInsets.bottom) + } else { + contentBottomControlsInset = 0 + } + content.setInsetForBottomControls(contentBottomControlsInset) + centerContent() }