mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
at ruby-v 89 lines 2.4 kB view raw
1// 2// SheetViewController.swift 3// Pods 4// 5// Created by Hailey on 9/30/24. 6// 7 8import Foundation 9import UIKit 10 11class SheetViewController: UIViewController { 12 init() { 13 super.init(nibName: nil, bundle: nil) 14 15 self.modalPresentationStyle = .formSheet 16 self.isModalInPresentation = false 17 18 if let sheet = self.sheetPresentationController { 19 sheet.prefersGrabberVisible = false 20 } 21 } 22 23 func setDetents(contentHeight: CGFloat, preventExpansion: Bool) { 24 guard let sheet = self.sheetPresentationController, 25 let screenHeight = Util.getScreenHeight() 26 else { 27 return 28 } 29 30 if #available(iOS 16.0, *) { 31 if contentHeight > screenHeight - 100 { 32 sheet.detents = [ 33 .large() 34 ] 35 sheet.selectedDetentIdentifier = .large 36 } else { 37 sheet.detents = [ 38 .custom { _ in 39 return contentHeight 40 } 41 ] 42 if !preventExpansion { 43 sheet.detents.append(.large()) 44 } 45 sheet.selectedDetentIdentifier = .medium 46 } 47 } else { 48 if contentHeight > screenHeight / 2 { 49 sheet.detents = [ 50 .large() 51 ] 52 sheet.selectedDetentIdentifier = .large 53 } else { 54 sheet.detents = [ 55 .medium() 56 ] 57 if !preventExpansion { 58 sheet.detents.append(.large()) 59 } 60 sheet.selectedDetentIdentifier = .medium 61 } 62 } 63 } 64 65 func updateDetents(contentHeight: CGFloat, preventExpansion: Bool) { 66 if let sheet = self.sheetPresentationController { 67 // Capture `self` weakly to prevent retain cycles. 68 // Also, capture `sheet` weakly to avoid potential strong references held by animateChanges. 69 sheet.animateChanges { [weak self, weak sheet] in 70 guard let weakSelf = self, let weakSheet = sheet else { return } 71 weakSelf.setDetents(contentHeight: contentHeight, preventExpansion: preventExpansion) 72 if #available(iOS 16.0, *) { 73 weakSheet.invalidateDetents() 74 } 75 } 76 } 77 } 78 79 func getCurrentDetentIdentifier() -> UISheetPresentationController.Detent.Identifier? { 80 guard let sheet = self.sheetPresentationController else { 81 return nil 82 } 83 return sheet.selectedDetentIdentifier 84 } 85 86 required init?(coder: NSCoder) { 87 fatalError("init(coder:) has not been implemented") 88 } 89}