cleanup tweaks

This commit is contained in:
Hailey
2024-10-09 19:20:48 -07:00
parent 2841944789
commit 3aa9980ba5
3 changed files with 28 additions and 24 deletions
+24 -18
View File
@@ -3,9 +3,14 @@ import UIKit
class SheetView: ExpoView, UISheetPresentationControllerDelegate { class SheetView: ExpoView, UISheetPresentationControllerDelegate {
// Views // Views
private var sheetVc: SheetViewController? private var sheetVc: SheetViewController!
private var innerView: UIView? private var innerView: UIView?
private var touchHandler: RCTTouchHandler?
// Scroll view
private var scrollView: RCTScrollView?
// Touch handler
private var touchHandler: RCTTouchHandler!
// Events // Events
private let onAttemptDismiss = EventDispatcher() private let onAttemptDismiss = EventDispatcher()
@@ -26,9 +31,9 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
var preventExpansion = false var preventExpansion = false
var cornerRadius: CGFloat? var cornerRadius: CGFloat?
var minHeight = 0.0 var minHeight = 0.0
var maxHeight: CGFloat! { var maxHeight: CGFloat = Util.getScreenHeight() {
didSet { didSet {
let screenHeight = Util.getScreenHeight() ?? 0 let screenHeight = Util.getScreenHeight()
if maxHeight > screenHeight { if maxHeight > screenHeight {
maxHeight = screenHeight maxHeight = screenHeight
} }
@@ -66,14 +71,22 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
} }
} }
} }
private var prevLayoutDetentIdentifier: UISheetPresentationController.Detent.Identifier? private var prevLayoutDetentIdentifier: UISheetPresentationController.Detent.Identifier?
// MARK: - Lifecycle // MARK: - Lifecycle
required init (appContext: AppContext? = nil) { required init (appContext: AppContext? = nil) {
super.init(appContext: appContext) super.init(appContext: appContext)
self.maxHeight = Util.getScreenHeight()
self.touchHandler = RCTTouchHandler(bridge: appContext?.reactBridge) self.touchHandler = RCTTouchHandler(bridge: self.appContext?.reactBridge)
self.sheetVc = SheetViewController()
self.touchHandler.attach(to: self.sheetVc.view)
if let sheet = self.sheetVc.sheetPresentationController {
sheet.delegate = self
}
SheetManager.shared.add(self) SheetManager.shared.add(self)
} }
@@ -84,7 +97,6 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
// We don't want this view to actually get added to the tree, so we'll simply store it for adding // We don't want this view to actually get added to the tree, so we'll simply store it for adding
// to the SheetViewController // to the SheetViewController
override func insertReactSubview(_ subview: UIView!, at atIndex: Int) { override func insertReactSubview(_ subview: UIView!, at atIndex: Int) {
self.touchHandler?.attach(to: subview)
self.innerView = subview self.innerView = subview
} }
@@ -106,10 +118,7 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
private func destroy() { private func destroy() {
self.isClosing = false self.isClosing = false
self.isOpen = false self.isOpen = false
self.sheetVc = nil
self.touchHandler?.detach(from: self.innerView) self.touchHandler?.detach(from: self.innerView)
self.touchHandler = nil
self.innerView = nil
SheetManager.shared.remove(self) SheetManager.shared.remove(self)
} }
@@ -125,16 +134,13 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
return return
} }
let sheetVc = SheetViewController() self.sheetVc.view.addSubview(innerView)
sheetVc.setDetents(contentHeight: self.clampHeight(contentHeight), preventExpansion: self.preventExpansion) self.sheetVc.setDetents(contentHeight: self.clampHeight(contentHeight), preventExpansion: self.preventExpansion)
if let sheet = sheetVc.sheetPresentationController { if let sheet = sheetVc.sheetPresentationController {
sheet.delegate = self
sheet.preferredCornerRadius = self.cornerRadius sheet.preferredCornerRadius = self.cornerRadius
self.selectedDetentIdentifier = sheet.selectedDetentIdentifier self.selectedDetentIdentifier = sheet.selectedDetentIdentifier
} }
sheetVc.view.addSubview(innerView)
self.sheetVc = sheetVc
self.isOpening = true self.isOpening = true
rvc.present(sheetVc, animated: true) { [weak self] in rvc.present(sheetVc, animated: true) { [weak self] in
@@ -146,16 +152,16 @@ class SheetView: ExpoView, UISheetPresentationControllerDelegate {
func updateLayout() { func updateLayout() {
if self.prevLayoutDetentIdentifier == self.selectedDetentIdentifier, if self.prevLayoutDetentIdentifier == self.selectedDetentIdentifier,
let contentHeight = self.innerView?.subviews.first?.frame.size.height { let contentHeight = self.innerView?.subviews.first?.frame.size.height {
self.sheetVc?.updateDetents(contentHeight: self.clampHeight(contentHeight), self.sheetVc.updateDetents(contentHeight: self.clampHeight(contentHeight),
preventExpansion: self.preventExpansion) preventExpansion: self.preventExpansion)
self.selectedDetentIdentifier = self.sheetVc?.getCurrentDetentIdentifier() self.selectedDetentIdentifier = self.sheetVc.getCurrentDetentIdentifier()
} }
self.prevLayoutDetentIdentifier = self.selectedDetentIdentifier self.prevLayoutDetentIdentifier = self.selectedDetentIdentifier
} }
func dismiss() { func dismiss() {
self.isClosing = true self.isClosing = true
self.sheetVc?.dismiss(animated: true) { [weak self] in self.sheetVc.dismiss(animated: true) { [weak self] in
self?.destroy() self?.destroy()
} }
} }
@@ -21,13 +21,11 @@ class SheetViewController: UIViewController {
} }
func setDetents(contentHeight: CGFloat, preventExpansion: Bool) { func setDetents(contentHeight: CGFloat, preventExpansion: Bool) {
guard let sheet = self.sheetPresentationController, guard let sheet = self.sheetPresentationController else {
let screenHeight = Util.getScreenHeight()
else {
return return
} }
if contentHeight > screenHeight - 100 { if contentHeight > Util.getScreenHeight() - 100 {
sheet.detents = [ sheet.detents = [
.large() .large()
] ]
+2 -2
View File
@@ -6,13 +6,13 @@
// //
class Util { class Util {
static func getScreenHeight() -> CGFloat? { static func getScreenHeight() -> CGFloat {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene, if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first { let window = windowScene.windows.first {
let safeAreaInsets = window.safeAreaInsets let safeAreaInsets = window.safeAreaInsets
let fullScreenHeight = UIScreen.main.bounds.height let fullScreenHeight = UIScreen.main.bounds.height
return fullScreenHeight - (safeAreaInsets.top + safeAreaInsets.bottom) return fullScreenHeight - (safeAreaInsets.top + safeAreaInsets.bottom)
} }
return nil return 0
} }
} }