update to make collection less restrictive
This commit is contained in:
parent
c6b8eacff4
commit
4941c51be3
@ -8,6 +8,6 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
public protocol CollectionItemModelProtocol: ContainerModelProtocol {
|
||||
public protocol CollectionItemModelProtocol {
|
||||
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
import Foundation
|
||||
|
||||
|
||||
@objcMembers open class MoleculeCollectionItemModel: CollectionItemModelProtocol, MoleculeModelProtocol {
|
||||
@objcMembers open class MoleculeCollectionItemModel: CollectionItemModelProtocol, ContainerModelProtocol, MoleculeModelProtocol {
|
||||
open class var identifier: String {
|
||||
return "collectionItem"
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
/// A base collection view cell with basic mvm functionality.
|
||||
open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCoreViewProtocol {
|
||||
|
||||
// Convenience helpers
|
||||
@ -44,7 +45,9 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
|
||||
}
|
||||
|
||||
open func updateView(_ size: CGFloat) {
|
||||
containerHelper.updateViewMargins(contentView, model: model, size: size)
|
||||
if let model = model as? ContainerModelProtocol {
|
||||
containerHelper.updateViewMargins(contentView, model: model, size: size)
|
||||
}
|
||||
(molecule as? MVMCoreViewProtocol)?.updateView(size)
|
||||
}
|
||||
|
||||
@ -63,7 +66,9 @@ open class CollectionViewCell: UICollectionViewCell, MoleculeViewProtocol, MVMCo
|
||||
}
|
||||
|
||||
// align if needed.
|
||||
containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol)
|
||||
if let model = model as? ContainerModelProtocol {
|
||||
containerHelper.set(with: model, for: molecule as? MVMCoreUIViewConstrainingProtocol)
|
||||
}
|
||||
}
|
||||
|
||||
/// Convenience function. Adds the molecule to the view.
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
/// A base view controller with a collection view.
|
||||
@objc open class ProgrammaticCollectionViewController: ScrollingViewController {
|
||||
|
||||
public var collectionView: UICollectionView?
|
||||
|
||||
@ -181,35 +181,30 @@ import Foundation
|
||||
open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
|
||||
guard let _ = topView,
|
||||
section == 0 else { return .zero }
|
||||
|
||||
// Calculate the height of the header since apple doesn't support autolayout. Width is fixed, height is tall as content.
|
||||
let header = headerView ?? self.collectionView(collectionView, viewForSupplementaryElementOfKind: UICollectionView.elementKindSectionHeader, at: IndexPath(row: 0, section: section))
|
||||
|
||||
// Use this view to calculate the optimal size based on the collection view's width
|
||||
return header.systemLayoutSizeFitting(CGSize(width: collectionView.frame.width, height: UIView.layoutFittingExpandedSize.height),
|
||||
withHorizontalFittingPriority: .required, // Width is fixed
|
||||
verticalFittingPriority: .fittingSizeLevel) // Height can be as large as needed
|
||||
return header.systemLayoutSizeFitting(CGSize(width: collectionView.frame.width, height: UIView.layoutFittingExpandedSize.height), withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel)
|
||||
}
|
||||
|
||||
open func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
|
||||
guard let _ = bottomView,
|
||||
section == numberOfSections(in: collectionView) - 1 else { return .zero }
|
||||
|
||||
// Calculate the height of the footr since apple doesn't support autolayout. Width is fixed, height is tall as content.
|
||||
let footer = footerView ?? self.collectionView(collectionView, viewForSupplementaryElementOfKind: UICollectionView.elementKindSectionFooter, at: IndexPath(row: 0, section: section))
|
||||
|
||||
// Use this view to calculate the optimal size based on the collection view's width
|
||||
let size = footer.systemLayoutSizeFitting(CGSize(width: collectionView.frame.width, height: UIView.layoutFittingExpandedSize.height),
|
||||
withHorizontalFittingPriority: .required, // Width is fixed
|
||||
verticalFittingPriority: .fittingSizeLevel) // Height can be as large as needed
|
||||
return size
|
||||
return footer.systemLayoutSizeFitting(CGSize(width: collectionView.frame.width, height: UIView.layoutFittingExpandedSize.height), withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel)
|
||||
}
|
||||
|
||||
open func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
|
||||
if kind == UICollectionView.elementKindSectionFooter {
|
||||
let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerID, for: indexPath) as! ContainerCollectionReusableView
|
||||
if kind == UICollectionView.elementKindSectionFooter,
|
||||
let footerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerID, for: indexPath) as? ContainerCollectionReusableView {
|
||||
footerView.addAndContain(view: bottomView!)
|
||||
footerView.topConstraint?.constant = spaceAboveBottomView() ?? 0
|
||||
self.footerView = footerView
|
||||
return footerView
|
||||
} else if kind == UICollectionView.elementKindSectionHeader {
|
||||
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerID, for: indexPath) as! ContainerCollectionReusableView
|
||||
} else if kind == UICollectionView.elementKindSectionHeader,
|
||||
let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerID, for: indexPath) as? ContainerCollectionReusableView {
|
||||
headerView.addAndContain(view: topView!)
|
||||
headerView.bottomConstraint?.constant = spaceBelowTopView() ?? 0
|
||||
self.headerView = headerView
|
||||
|
||||
Loading…
Reference in New Issue
Block a user