diff --git a/VDS/Components/Buttons/ButtonGroup/ButtonGroupPositionLayout.swift b/VDS/Components/Buttons/ButtonGroup/ButtonGroupPositionLayout.swift index f4ccf276..5d3a339f 100644 --- a/VDS/Components/Buttons/ButtonGroup/ButtonGroupPositionLayout.swift +++ b/VDS/Components/Buttons/ButtonGroup/ButtonGroupPositionLayout.swift @@ -146,6 +146,8 @@ class ButtonLayoutAttributes: UICollectionViewLayoutAttributes{ class ButtonGroupPositionLayout: UICollectionViewLayout { weak var delegate: ButtongGroupPositionLayoutDelegate? + var verticalSpacer: ((ButtonCollectionViewRow, ButtonCollectionViewRow?) -> CGFloat)? + var axisSpacer: ((NSLayoutConstraint.Axis, ButtonBase, ButtonBase) -> CGFloat)? // Total height of the content. Will be used to configure the scrollview content var layoutHeight: CGFloat = 0.0 @@ -154,7 +156,7 @@ class ButtonGroupPositionLayout: UICollectionViewLayout { var buttonPercentage: CGFloat? private var itemCache: [ButtonLayoutAttributes] = [] - + override func prepare() { super.prepare() @@ -226,7 +228,7 @@ class ButtonGroupPositionLayout: UICollectionViewLayout { let neighbor = delegate.collectionView(collectionView, buttonBaseAtIndexPath: IndexPath(item: nextItem, section: section)) // get the spacing to go between the current and next button - itemSpacing = ButtonGroupConstants.getSpacing(for: .horizontal, with: itemButtonBase, neighboring: neighbor) + itemSpacing = getAxisSpacing(for: .horizontal, with: itemButtonBase, neighboring: neighbor) } // create the custom layout attribute @@ -255,7 +257,7 @@ class ButtonGroupPositionLayout: UICollectionViewLayout { if item > 0 { let prevRow = rows[item - 1] - rowSpacing = ButtonGroupConstants.getVerticalSpacing(for: prevRow, neighboringRow: row) + rowSpacing = getVerticalSpacing(for: prevRow, neighboringRow: row) row.rowY = layoutHeight + rowSpacing layoutHeight += rowSpacing } @@ -300,5 +302,19 @@ class ButtonGroupPositionLayout: UICollectionViewLayout { } return collectionView.bounds.width } + + private func getAxisSpacing(for axis: NSLayoutConstraint.Axis, with primary: ButtonBase, neighboring: ButtonBase) -> CGFloat { + guard let axisSpacer else { + return ButtonGroupConstants.getSpacing(for: axis, with: primary, neighboring: neighboring) + } + return axisSpacer(axis, primary, neighboring) + } + + private func getVerticalSpacing(for row: ButtonCollectionViewRow, neighboringRow: ButtonCollectionViewRow?) -> CGFloat { + guard let verticalSpacer else { + return ButtonGroupConstants.getVerticalSpacing(for: row, neighboringRow: neighboringRow) + } + return verticalSpacer(row, neighboringRow) + } }