diff options
author | Jaz Volpert <ericvolp12@gmail.com> | 2024-10-04 14:28:52 -0700 |
---|---|---|
committer | Jaz Volpert <ericvolp12@gmail.com> | 2024-10-04 14:28:52 -0700 |
commit | 5f3c4c60dbf2232a76ddb591f0eb51359443113a (patch) | |
tree | e9308f1e3d3cc75d9ed3abd15d5e5183a5b62ef7 /modules/bottom-sheet/ios/SheetViewController.swift | |
parent | 0d99b8b0550084ef55f294b33ef5e12608fd5035 (diff) | |
parent | 3fb14d184a84cb892c751338c9aea625f5767a47 (diff) | |
download | voidsky-5f3c4c60dbf2232a76ddb591f0eb51359443113a.tar.zst |
Merge branch 'main' into static_asset_cdn
Diffstat (limited to 'modules/bottom-sheet/ios/SheetViewController.swift')
-rw-r--r-- | modules/bottom-sheet/ios/SheetViewController.swift | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/modules/bottom-sheet/ios/SheetViewController.swift b/modules/bottom-sheet/ios/SheetViewController.swift new file mode 100644 index 000000000..56473b21c --- /dev/null +++ b/modules/bottom-sheet/ios/SheetViewController.swift @@ -0,0 +1,76 @@ +// +// SheetViewController.swift +// Pods +// +// Created by Hailey on 9/30/24. +// + +import Foundation +import UIKit + +class SheetViewController: UIViewController { + init() { + super.init(nibName: nil, bundle: nil) + + self.modalPresentationStyle = .formSheet + self.isModalInPresentation = false + + if let sheet = self.sheetPresentationController { + sheet.prefersGrabberVisible = false + } + } + + func setDetents(contentHeight: CGFloat, preventExpansion: Bool) { + guard let sheet = self.sheetPresentationController, + let screenHeight = Util.getScreenHeight() + else { + return + } + + if contentHeight > screenHeight - 100 { + sheet.detents = [ + .large() + ] + sheet.selectedDetentIdentifier = .large + } else { + if #available(iOS 16.0, *) { + sheet.detents = [ + .custom { _ in + return contentHeight + } + ] + } else { + sheet.detents = [ + .medium() + ] + } + + if !preventExpansion { + sheet.detents.append(.large()) + } + sheet.selectedDetentIdentifier = .medium + } + } + + func updateDetents(contentHeight: CGFloat, preventExpansion: Bool) { + if let sheet = self.sheetPresentationController { + sheet.animateChanges { + self.setDetents(contentHeight: contentHeight, preventExpansion: preventExpansion) + if #available(iOS 16.0, *) { + sheet.invalidateDetents() + } + } + } + } + + func getCurrentDetentIdentifier() -> UISheetPresentationController.Detent.Identifier? { + guard let sheet = self.sheetPresentationController else { + return nil + } + return sheet.selectedDetentIdentifier + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} |