diff --git a/Sources/Flow/Internal/Layout.swift b/Sources/Flow/Internal/Layout.swift index b8536818..c4dfd614 100644 --- a/Sources/Flow/Internal/Layout.swift +++ b/Sources/Flow/Internal/Layout.swift @@ -66,7 +66,7 @@ struct FlowLayout: Sendable { var size = lines .map(\.size) .reduce(.zero, breadth: max, depth: +) - size[.vertical] += lines.sum(of: \.leadingSpace) + size.depth += lines.sum(of: \.leadingSpace) return CGSize(size: size, axis: axis) } diff --git a/Tests/FlowTests/FlowTests.swift b/Tests/FlowTests/FlowTests.swift index 9bdd7a6d..a5dc8537 100644 --- a/Tests/FlowTests/FlowTests.swift +++ b/Tests/FlowTests/FlowTests.swift @@ -253,6 +253,28 @@ final class FlowTests: XCTestCase { """) } + func test_VFlow_size_singleElement() throws { + // Given + let sut: FlowLayout = .vertical(alignment: .center, itemSpacing: 10, lineSpacing: 20) + + // When + let size = sut.sizeThatFits(proposal: 100×100, subviews: [50×50]) + + // Then + XCTAssertEqual(size, 50×50) + } + + func test_VFlow_size_multipleElements() throws { + // Given + let sut: FlowLayout = .vertical(alignment: .center, itemSpacing: 10, lineSpacing: 20) + + // When + let size = sut.sizeThatFits(proposal: 130×130, subviews: repeated(50×50, times: 3)) + + // Then + XCTAssertEqual(size, 120×110) + } + func test_VFlow_layout_leading() { // Given let sut: FlowLayout = .vertical(alignment: .leading, itemSpacing: 1, lineSpacing: 1)