mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
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}