diff --git a/VDS/Components/Table/Table.swift b/VDS/Components/Table/Table.swift index 8ce5f462..39cc6698 100644 --- a/VDS/Components/Table/Table.swift +++ b/VDS/Components/Table/Table.swift @@ -51,10 +51,8 @@ open class Table: View { func horizontalValue() -> CGFloat { switch self { - case .standard: - return UIDevice.isIPad ? VDSLayout.space8X : VDSLayout.space6X - case .compact: - return UIDevice.isIPad ? VDSLayout.space8X : VDSLayout.space6X + case .standard, .compact: + return UIDevice.isIPad ? VDSLayout.space4X : VDSLayout.space3X } } @@ -147,7 +145,10 @@ extension Table: UICollectionViewDelegate, UICollectionViewDataSource, TableColl guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TableCellItem.Identifier, for: indexPath) as? TableCellItem else { return UICollectionViewCell() } let currentItem = tableData[indexPath.section].columns[indexPath.row] let shouldStrip = striped ? (indexPath.section % 2 != 0) : false - cell.updateCell(content: currentItem, surface: surface, striped: shouldStrip, padding: padding) + let isHeader = tableData[indexPath.section].isHeader + var edgePadding = UIEdgeInsets(top: padding.verticalValue(), left: 0, bottom: padding.verticalValue(), right: padding.horizontalValue()) + edgePadding.left = (indexPath.row == 0 && !striped) ? VDSLayout.space1X : padding.horizontalValue() + cell.updateCell(content: currentItem, surface: surface, striped: shouldStrip, padding: edgePadding, isHeader: isHeader) return cell } diff --git a/VDS/Components/Table/TableCellItem.swift b/VDS/Components/Table/TableCellItem.swift index 23d2df74..0c87fb35 100644 --- a/VDS/Components/Table/TableCellItem.swift +++ b/VDS/Components/Table/TableCellItem.swift @@ -29,10 +29,7 @@ final class TableCellItem: UICollectionViewCell { /// Color configuration for striped background color private let stripedColorConfiguration = SurfaceColorConfiguration(VDSColor.backgroundSecondaryLight, VDSColor.backgroundSecondaryDark) - - /// Padding parameter to maintain the edge spacing of the containerView - private var padding: Table.Padding = .standard - + //-------------------------------------------------- // MARK: - Initializers //-------------------------------------------------- @@ -58,10 +55,10 @@ final class TableCellItem: UICollectionViewCell { //-------------------------------------------------- /// Updates the cell content with ``TableItemModel`` and styling/padding attributes from other parameters - public func updateCell(content: TableItemModel, surface: Surface, striped: Bool = false, padding: Table.Padding = .standard) { + public func updateCell(content: TableItemModel, surface: Surface, striped: Bool = false, padding: UIEdgeInsets, isHeader: Bool = false) { containerView.subviews.forEach({ $0.removeFromSuperview() }) - self.padding = padding + containerView.surface = surface containerView.backgroundColor = striped ? stripedColorConfiguration.getColor(surface) : backgroundColorConfiguration.getColor(surface) @@ -82,11 +79,11 @@ final class TableCellItem: UICollectionViewCell { } NSLayoutConstraint.activate([ - component.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: VDSLayout.space1X), - component.topAnchor.constraint(greaterThanOrEqualTo: containerView.topAnchor, constant: padding.verticalValue()), - containerView.bottomAnchor.constraint(greaterThanOrEqualTo: component.bottomAnchor, constant: padding.verticalValue()), - containerView.trailingAnchor.constraint(greaterThanOrEqualTo: component.trailingAnchor, constant: padding.horizontalValue()), - containerView.centerYAnchor.constraint(equalTo: component.centerYAnchor) + component.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: padding.left), + containerView.trailingAnchor.constraint(greaterThanOrEqualTo: component.trailingAnchor, constant: padding.right) ]) + + component.topAnchor.constraint(equalTo: containerView.topAnchor, constant: padding.top).isActive = !isHeader + containerView.bottomAnchor.constraint(equalTo: component.bottomAnchor, constant: padding.bottom).isActive = isHeader } } diff --git a/VDS/Components/Table/TableFlowLayout.swift b/VDS/Components/Table/TableFlowLayout.swift index 3513099d..2567f947 100644 --- a/VDS/Components/Table/TableFlowLayout.swift +++ b/VDS/Components/Table/TableFlowLayout.swift @@ -40,6 +40,9 @@ class MatrixFlowLayout : UICollectionViewFlowLayout { ///padding type to be set from Table component, which is used to calculate the size & position of the cell. var layoutPadding: Table.Padding = .standard + ///Striped status of Table, based on this status padding of leading attribute changes. + var striped: Bool = false + //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- @@ -77,7 +80,7 @@ class MatrixFlowLayout : UICollectionViewFlowLayout { let selectedItem = delegate.collectionView(collectionView, dataForItemAt: indexPath) ///Calculate the estimated height of the cell - let itemHeight = estimateHeightFor(item: selectedItem, with: itemWidth) + let itemHeight = estimateHeightFor(item: selectedItem, with: itemWidth, index: indexPath) layoutWidth += itemWidth @@ -108,8 +111,8 @@ class MatrixFlowLayout : UICollectionViewFlowLayout { } /// Fetches estimated height by calling the cell's component estimated height and adding padding - private func estimateHeightFor(item: TableItemModel, with width: CGFloat) -> CGFloat { - + private func estimateHeightFor(item: TableItemModel, with width: CGFloat, index: IndexPath) -> CGFloat { + let horizontalPadding = (index.row == 0 && !striped) ? (VDSLayout.space1X + layoutPadding.horizontalValue()) : (2 * layoutPadding.horizontalValue()) let itemWidth = width - layoutPadding.horizontalValue() - defaultLeadingPadding let maxSize = CGSize(width: itemWidth, height: CGFloat.greatestFiniteMagnitude) let estItemSize = item.component?.systemLayoutSizeFitting(maxSize, withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel) ?? CGSize(width: itemWidth, height: item.defaultHeight) diff --git a/VDS/Components/Table/TableRowModel.swift b/VDS/Components/Table/TableRowModel.swift index a838438f..22f428ce 100644 --- a/VDS/Components/Table/TableRowModel.swift +++ b/VDS/Components/Table/TableRowModel.swift @@ -11,11 +11,14 @@ public struct TableRowModel { public var columns: [TableItemModel] + public var isHeader: Bool = false + public var columnsCount: Int { return columns.count } - public init(columns: [TableItemModel]) { + public init(columns: [TableItemModel], isHeader: Bool = false) { self.columns = columns + self.isHeader = isHeader } }