From a134b3cb2f7c9d3c4375744de9ef053f3dbed9af Mon Sep 17 00:00:00 2001 From: Levitating Pineapple Date: Tue, 1 Oct 2024 17:01:36 +0300 Subject: [PATCH] fix iOS15 sheet animation when presenting sheet multiple times --- .../Views/Helpers/SheetRepresentable.swift | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/apps/ios/Shared/Views/Helpers/SheetRepresentable.swift b/apps/ios/Shared/Views/Helpers/SheetRepresentable.swift index 23df9f534d..c1429d8784 100644 --- a/apps/ios/Shared/Views/Helpers/SheetRepresentable.swift +++ b/apps/ios/Shared/Views/Helpers/SheetRepresentable.swift @@ -93,20 +93,23 @@ struct SheetRepresentable: UIViewControllerRepresentable { hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor), hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor), ]) - animator.pausesOnCompletion = true - animator.scrubsLinearly = true } } override func viewDidAppear(_ animated: Bool) { - hostingController.view.transform = CGAffineTransform(translationX: 0, y: self.sheetHeight) - hostingController.view.isHidden = false - self.animator.addAnimations { - self.hostingController.view.transform = .identity - self.view.backgroundColor = UIColor { - switch $0.userInterfaceStyle { - case .dark: .black.withAlphaComponent(0.290) - default: .black.withAlphaComponent(0.121) + // Ensures animations are only setup once + // on some iOS version `viewDidAppear` can get called on each state change. + if hostingController.view.isHidden { + hostingController.view.transform = CGAffineTransform(translationX: 0, y: self.sheetHeight) + hostingController.view.isHidden = false + animator.pausesOnCompletion = true + animator.addAnimations { + self.hostingController.view.transform = .identity + self.view.backgroundColor = UIColor { + switch $0.userInterfaceStyle { + case .dark: .black.withAlphaComponent(0.290) + default: .black.withAlphaComponent(0.121) + } } } }