diff --git a/Apps/Examples/Examples/FioriSwiftUICore/DataTable/DataTableExample.swift b/Apps/Examples/Examples/FioriSwiftUICore/DataTable/DataTableExample.swift index ec0ea4138..92d19cb13 100644 --- a/Apps/Examples/Examples/FioriSwiftUICore/DataTable/DataTableExample.swift +++ b/Apps/Examples/Examples/FioriSwiftUICore/DataTable/DataTableExample.swift @@ -77,31 +77,28 @@ public struct DataTableExample: View { func makeBody() -> some View { var view = DataTable(model: self.model) return - NavigationView { - view - .navigationBarTitle("Data Table", displayMode: .inline) - .navigationBarItems(leading: - Button(action: { - showingSheet.toggle() - }) { - Image(systemName: "plus") - }.sheet(isPresented: $showingSheet) { - SheetView(model: self.model) - }, - trailing: - Button(self.isEditing ? "Delete" : "Edit") { - DispatchQueue.main.async { - self.isEditing = !self.isEditing - view.isEditing = self.isEditing - if !self.isEditing { - let indexSet = IndexSet(self.model.selectedIndexes) - self.model.rowData.remove(atOffsets: indexSet) - self.model.selectedIndexes = [] - } + view + .navigationBarTitle("Data Table", displayMode: .inline) + .navigationBarItems(leading: + Button(action: { + showingSheet.toggle() + }) { + Image(systemName: "plus") + }.sheet(isPresented: $showingSheet) { + SheetView(model: self.model) + }, + trailing: + Button(self.isEditing ? "Delete" : "Edit") { + DispatchQueue.main.async { + self.isEditing = !self.isEditing + view.isEditing = self.isEditing + if !self.isEditing { + let indexSet = IndexSet(self.model.selectedIndexes) + self.model.rowData.remove(atOffsets: indexSet) + self.model.selectedIndexes = [] } - }) - } - .navigationViewStyle(StackNavigationViewStyle()) + } + }) } } diff --git a/Sources/FioriSwiftUICore/DataTable/DataTable.swift b/Sources/FioriSwiftUICore/DataTable/DataTable.swift index 46ab0da99..01177bfa9 100644 --- a/Sources/FioriSwiftUICore/DataTable/DataTable.swift +++ b/Sources/FioriSwiftUICore/DataTable/DataTable.swift @@ -67,7 +67,7 @@ public struct DataTable: View { let dataManager = TableDataManager(selectedIndexes: self.model.selectedIndexes) layoutManager.sizeClass = self.horizontalSizeClass ?? .compact layoutManager.rect = rect - + layoutManager.setupMargins(rect: layoutManager.rect) return Group { if self.horizontalSizeClass == .compact, self.verticalSizeClass == .regular, self.model.showListView { let listView = TableListView(layoutManager: layoutManager) diff --git a/Sources/FioriSwiftUICore/DataTable/GridTableView.swift b/Sources/FioriSwiftUICore/DataTable/GridTableView.swift index 812b5af9b..137a4d107 100644 --- a/Sources/FioriSwiftUICore/DataTable/GridTableView.swift +++ b/Sources/FioriSwiftUICore/DataTable/GridTableView.swift @@ -73,7 +73,6 @@ struct GridTableView: View { self.lastScaleX = self.layoutManager.scaleX self.lastScaleY = self.layoutManager.scaleY } - let items: [[DataTableItem]] = self.layoutManager.dataItemsForTable(rect: rect) return diff --git a/Sources/FioriSwiftUICore/DataTable/LeadingAccessoryView.swift b/Sources/FioriSwiftUICore/DataTable/LeadingAccessoryView.swift index d2cd2b5b1..0cbac4ab0 100644 --- a/Sources/FioriSwiftUICore/DataTable/LeadingAccessoryView.swift +++ b/Sources/FioriSwiftUICore/DataTable/LeadingAccessoryView.swift @@ -28,33 +28,40 @@ struct LeadingAccessoryView: View { var body: some View { Group { - let totalWidth = self.layoutManager.leadingItemsWidths[self.layoutIndex] - let offset = totalWidth / 2 makeBody(items: self.items) - .offset(x: offset * self.layoutManager.scaleX) } } - func makeBody(items: [AccessoryItem]) -> some View { - HStack(alignment: .center, spacing: 4) { - makeSectionButton() - ForEach(0 ..< items.count, id: \.self) { index in - switch items[index] { - case .button(let button): - makeButton(button: button) - case .icon(let image): - image - .resizable() - .aspectRatio(contentMode: .fit) - .foregroundColor(TableViewLayout.defaultForegroundColor) - .frame(width: 16 * self.layoutManager.scaleX, height: 16 * self.layoutManager.scaleY, alignment: .center) - case .text(let string): - Text(string) + func makeBody(items: [AccessoryItem]) -> AnyView { + guard self.layoutIndex < self.layoutManager.rowHeights.count else { + return AnyView(EmptyView()) + } + + let totalWidth = self.layoutManager.leadingItemsWidths[self.layoutIndex] + let offset = totalWidth / 2 + + return AnyView( + HStack(alignment: .center, spacing: 4) { + makeSectionButton() + ForEach(0 ..< items.count, id: \.self) { index in + switch items[index] { + case .button(let button): + makeButton(button: button) + case .icon(let image): + image + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(TableViewLayout.defaultForegroundColor) + .frame(width: 16 * self.layoutManager.scaleX, height: 16 * self.layoutManager.scaleY, alignment: .center) + case .text(let string): + Text(string) + } } } - } - .frame(height: self.layoutManager.rowHeights[self.layoutIndex] * self.layoutManager.scaleY) - .background(self.backgroundColor) + .frame(height: self.layoutManager.rowHeights[self.layoutIndex] * self.layoutManager.scaleY) + .offset(x: offset * self.layoutManager.scaleX) + .background(self.backgroundColor) + ) } func makeButton(button: AccessoryButton) -> some View { diff --git a/Sources/FioriSwiftUICore/DataTable/TableLayoutMangerExtension.swift b/Sources/FioriSwiftUICore/DataTable/TableLayoutMangerExtension.swift index 939a87f71..5a2382412 100644 --- a/Sources/FioriSwiftUICore/DataTable/TableLayoutMangerExtension.swift +++ b/Sources/FioriSwiftUICore/DataTable/TableLayoutMangerExtension.swift @@ -168,9 +168,7 @@ extension TableLayoutManager { var width: CGFloat = 0 var height: CGFloat = 0 - - self.setupMargins(rect: rect) - + width = self.getColumnWidths(rect).reduce(0, +) width += self.tableLeadingLayoutMargin width += self.tableTrailingLayoutMargin @@ -223,7 +221,7 @@ extension TableLayoutManager { var heights: [CGFloat] = [] for (index, row) in rows.enumerated() { var itemHeight: CGFloat = 0 - let isHeader = self.model.headerData != nil && index == 0 + let isHeader = self.model.hasHeader && index == 0 let topAndBottom = isHeader ? TableViewLayout.topAndBottomPaddingsForHeader : TableViewLayout.topAndBottomPaddings for item in row { itemHeight = max(item.size.height, itemHeight)