From 2febb37a8ed7867f178ee7b47d2922838b4079d1 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 23 Apr 2023 21:55:14 -0400 Subject: [PATCH] Let duckable VCs prevent ducking --- Packages/Duckable/Sources/Duckable/API.swift | 3 +++ .../Sources/Duckable/DuckableContainerViewController.swift | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Packages/Duckable/Sources/Duckable/API.swift b/Packages/Duckable/Sources/Duckable/API.swift index b3d0ebca..fb6da599 100644 --- a/Packages/Duckable/Sources/Duckable/API.swift +++ b/Packages/Duckable/Sources/Duckable/API.swift @@ -10,6 +10,8 @@ import UIKit public protocol DuckableViewController: UIViewController { var duckableDelegate: DuckableViewControllerDelegate? { get set } + func duckableViewControllerShouldDuck() -> Bool + func duckableViewControllerMayAttemptToDuck() func duckableViewControllerWillAnimateDuck(withDuration duration: CGFloat, afterDelay delay: CGFloat) @@ -18,6 +20,7 @@ public protocol DuckableViewController: UIViewController { } extension DuckableViewController { + public func duckableViewControllerShouldDuck() -> Bool { true } public func duckableViewControllerMayAttemptToDuck() {} public func duckableViewControllerWillAnimateDuck(withDuration duration: CGFloat, afterDelay delay: CGFloat) {} public func duckableViewControllerDidFinishAnimatingDuck() {} diff --git a/Packages/Duckable/Sources/Duckable/DuckableContainerViewController.swift b/Packages/Duckable/Sources/Duckable/DuckableContainerViewController.swift index 57946ece..f22baf5c 100644 --- a/Packages/Duckable/Sources/Duckable/DuckableContainerViewController.swift +++ b/Packages/Duckable/Sources/Duckable/DuckableContainerViewController.swift @@ -135,6 +135,10 @@ public class DuckableContainerViewController: UIViewController, DuckableViewCont guard case .presentingDucked(let viewController, isFirstPresentation: _) = state else { return } + guard viewController.duckableViewControllerShouldDuck() else { + viewController.sheetPresentationController!.selectedDetentIdentifier = .large + return + } let placeholder = createPlaceholderForDuckedViewController(viewController) state = .ducked(viewController, placeholder: placeholder) configureChildForDuckedPlaceholder() @@ -235,4 +239,3 @@ extension DuckableContainerViewController: UISheetPresentationControllerDelegate } } } -