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