From 03abdd3a9130829761145baceb93051e2970f27d Mon Sep 17 00:00:00 2001 From: "Pfeil, Scott Robert" Date: Wed, 22 Apr 2020 21:03:13 -0400 Subject: [PATCH] update collection for sizing properly --- MVMCoreUI/BaseClasses/CollectionView.swift | 13 +++++++++++++ .../ProgrammaticCollectionViewController.swift | 4 ++-- .../ThreeLayerCollectionViewController.swift | 6 +++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/MVMCoreUI/BaseClasses/CollectionView.swift b/MVMCoreUI/BaseClasses/CollectionView.swift index a1a57376..4b034462 100644 --- a/MVMCoreUI/BaseClasses/CollectionView.swift +++ b/MVMCoreUI/BaseClasses/CollectionView.swift @@ -10,6 +10,11 @@ import Foundation open class CollectionView: UICollectionView, MVMCoreViewProtocol { + /// A block that gets called on tableview frame changes + public var frameChangeAction: (() -> Void)? + + private var previousFrame = CGRect.zero + private var initialSetupPerformed = false private func initialSetup() { @@ -29,6 +34,14 @@ open class CollectionView: UICollectionView, MVMCoreViewProtocol { initialSetup() } + open override func layoutSubviews() { + super.layoutSubviews() + if frame != previousFrame { + frameChangeAction?() + } + previousFrame = frame + } + public func updateView(_ size: CGFloat) { for cell in visibleCells { (cell as? MVMCoreViewProtocol)?.updateView(size) diff --git a/MVMCoreUI/BaseControllers/ProgrammaticCollectionViewController.swift b/MVMCoreUI/BaseControllers/ProgrammaticCollectionViewController.swift index c70a3ef1..85e0f3a7 100644 --- a/MVMCoreUI/BaseControllers/ProgrammaticCollectionViewController.swift +++ b/MVMCoreUI/BaseControllers/ProgrammaticCollectionViewController.swift @@ -11,7 +11,7 @@ import Foundation /// A base view controller with a collection view. @objc open class ProgrammaticCollectionViewController: ScrollingViewController { - public var collectionView: UICollectionView? + public var collectionView: CollectionView? public var topConstraint: NSLayoutConstraint? public var bottomConstraint: NSLayoutConstraint? @@ -49,7 +49,7 @@ import Foundation } /// Creates the collection view. - open func createCollectionView() -> UICollectionView { + open func createCollectionView() -> CollectionView { let collection = CollectionView(frame: .zero, collectionViewLayout: createCollectionViewLayout()) collection.dataSource = self collection.delegate = self diff --git a/MVMCoreUI/BaseControllers/ThreeLayerCollectionViewController.swift b/MVMCoreUI/BaseControllers/ThreeLayerCollectionViewController.swift index 29d401f0..880f5525 100644 --- a/MVMCoreUI/BaseControllers/ThreeLayerCollectionViewController.swift +++ b/MVMCoreUI/BaseControllers/ThreeLayerCollectionViewController.swift @@ -22,7 +22,7 @@ import Foundation /// Updates the padding for flexible space (header or footer) private func updateFlexibleSpace() { - guard false,let collectionView = collectionView else { return } + guard let collectionView = collectionView else { return } let minimumSpace: CGFloat = minimumFillSpace() var currentSpace: CGFloat = 0 @@ -126,6 +126,10 @@ import Foundation override open func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. + + collectionView?.frameChangeAction = { [weak self] in + self?.invalidateCollectionLayout() + } } //MARK: - Spacing