From 68e489ceea7dbdedb549ca02e8afbd7e1cf360e1 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Wed, 27 Mar 2024 14:43:30 -0500 Subject: [PATCH] refactored to use updated ButtonGroupPositionLayout Signed-off-by: Matt Bruce --- VDS/Components/Breadcrumbs/Breadcrumbs.swift | 33 ++++++++++++++------ 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/VDS/Components/Breadcrumbs/Breadcrumbs.swift b/VDS/Components/Breadcrumbs/Breadcrumbs.swift index 0ed7585d..2dd14d18 100644 --- a/VDS/Components/Breadcrumbs/Breadcrumbs.swift +++ b/VDS/Components/Breadcrumbs/Breadcrumbs.swift @@ -47,14 +47,17 @@ open class Breadcrumbs: View { //-------------------------------------------------- // MARK: - Private Properties //-------------------------------------------------- - let layout: UICollectionViewFlowLayout = BreadcrumbsFlowLayout().with { - $0.estimatedItemSize = UICollectionViewFlowLayout.automaticSize - $0.minimumInteritemSpacing = VDSLayout.Spacing.space1X.value - $0.minimumLineSpacing = VDSLayout.Spacing.space1X.value - $0.sectionInset = .zero - $0.scrollDirection = .vertical + fileprivate lazy var layout = ButtonGroupPositionLayout().with { + $0.position = .left + $0.delegate = self + $0.axisSpacer = { _, _, _ in + return VDSLayout.Spacing.space1X.value + } + $0.verticalSpacer = { _, _ in + return VDSLayout.Spacing.space1X.value + } } - + ///Collectionview to render Breadcrumb Items private lazy var collectionView: SelfSizingCollectionView = { let collectionView = SelfSizingCollectionView(frame: .zero, collectionViewLayout: layout) @@ -134,9 +137,10 @@ open class Breadcrumbs: View { self.collectionView.collectionViewLayout.invalidateLayout() } } + private var separatorWidth = Label().with { $0.text = "/"; $0.sizeToFit() }.intrinsicContentSize.width } -extension Breadcrumbs: UICollectionViewDelegate, UICollectionViewDataSource { +extension Breadcrumbs: UICollectionViewDelegate, UICollectionViewDataSource, ButtongGroupPositionLayoutDelegate { //-------------------------------------------------- // MARK: - UICollectionView Delegate & Datasource //-------------------------------------------------- @@ -150,5 +154,16 @@ extension Breadcrumbs: UICollectionViewDelegate, UICollectionViewDataSource { cell.update(surface: surface, hideSlash: hideSlash, breadCrumbItem: breadcrumbs[indexPath.row]) return cell } - + + public func collectionView(_ collectionView: UICollectionView, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize { + let breadcrumb = breadcrumbs[indexPath.row] + let intrinsicSize = breadcrumb.intrinsicContentSize + let separatorFullWidth: CGFloat = indexPath.row == 0 ? 0 : VDSLayout.Spacing.space1X.value + separatorWidth + let cellwidth = intrinsicSize.width + separatorFullWidth + return .init(width: min(cellwidth, collectionView.frame.width), height: intrinsicSize.height) + } + + public func collectionView(_ collectionView: UICollectionView, buttonBaseAtIndexPath indexPath: IndexPath) -> ButtonBase { + breadcrumbs[indexPath.row] + } }