diff --git a/Sources/AloeStackView/AloeStackView.swift b/Sources/AloeStackView/AloeStackView.swift index 3c17ef5..3b9fede 100644 --- a/Sources/AloeStackView/AloeStackView.swift +++ b/Sources/AloeStackView/AloeStackView.swift @@ -186,7 +186,7 @@ open class AloeStackView: UIScrollView { /// /// If `animated` is `true`, the change is animated. open func setRowHidden(_ row: UIView, isHidden: Bool, animated: Bool = false) { - guard let cell = row.superview as? StackViewCell else { return } + guard let cell = row.superview as? StackViewCell, cell.isHidden != isHidden else { return } if animated { UIView.animate(withDuration: 0.3) { diff --git a/Tests/AloeStackViewTests/AloeStackViewTests.swift b/Tests/AloeStackViewTests/AloeStackViewTests.swift index d5a3075..21c310d 100644 --- a/Tests/AloeStackViewTests/AloeStackViewTests.swift +++ b/Tests/AloeStackViewTests/AloeStackViewTests.swift @@ -21,4 +21,16 @@ final class AloeStackViewTests: XCTestCase { func test() { } + func testSetRowHiddenDuplicateCalls() { + let stackView = AloeStackView() + let row = UIView() + stackView.addRow(row) + + stackView.setRowHidden(row, isHidden: true, animated: true) + stackView.setRowHidden(row, isHidden: true, animated: true) + stackView.setRowHidden(row, isHidden: false, animated: true) + + XCTAssertFalse(stackView.isRowHidden(row)) + } + }