         let indexPaths = range.map { return IndexPath(row: $0, section: indexPath.section) }
         tableView.beginUpdates()
         if isCollapsed(viewModel) {
-            tableView.insertRows(at: indexPaths, with: .automatic)
+            tableView.insertRows(at: indexPaths, with: (hasAnimation ? .automatic : .none))
         } else {
             delegate?.collapsableTableViewDataSource(self, willHideCellsAt: indexPaths, at: tableView)
-            tableView.deleteRows(at: indexPaths, with: .top)
+            tableView.deleteRows(at: indexPaths, with: (hasAnimation ? .top : .none))
         }
         toggleCollapse(viewModel)
         tableView.reloadRows(at: [indexPath], with: .none)

    public func visibleChildrenCount(_ collapseClosure: (Self) -> Bool) -> Int {
        return visibleChildren(collapseClosure).count
    }
    
    public func visibleChildren(_ collapseClosure: (Self) -> Bool) -> [Self] {
        var result: [Self] = []
        if isHeader &&

                result.append(contentsOf: children[i].visibleChildren(collapseClosure))
            }
        }

        return result
    }
}
