From 97894f5d61e5f28f94111f0e7cb358d36ff9e2ca Mon Sep 17 00:00:00 2001 From: James Magahern Date: Mon, 15 Feb 2021 18:40:15 -0800 Subject: [PATCH] TabView: fix consistency error when closing tabs --- App/Tabs/TabBarView.swift | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/App/Tabs/TabBarView.swift b/App/Tabs/TabBarView.swift index a1d3f14..c08b526 100644 --- a/App/Tabs/TabBarView.swift +++ b/App/Tabs/TabBarView.swift @@ -9,7 +9,7 @@ import UIKit class TabView: UIControl { - var active: Bool = false { didSet { setNeedsLayout() } } + var active: Bool = false { didSet { layoutSubviews() } } var collapsed: Bool = false var identifier: UUID? @@ -153,7 +153,6 @@ class TabBarView: UIView let identifier = dataSource.tabBarView(self, uniqueIdentifierForTabAtIndex: i) if let tabView = tabViewsRemoved.first(where: { $0.identifier == identifier }) { tabViewsRemoved.remove(tabView) - self.reloadTab(atIndex: i) } else { let newTabView = makeTabView(withIdentifier: identifier) if animated { newTabView.collapsed = true } @@ -170,6 +169,11 @@ class TabBarView: UIView // Outgoing tabs collapse tabViewsRemoved.forEach { $0.collapsed = true } + // Reload tabs that are still here + for i in 0.. TabView? { + let visibleTabs = tabViews.filter { $0.collapsed == false } + if index >= visibleTabs.count { return nil } + + return visibleTabs[index] + } + private func makeTabView(withIdentifier identifier: UUID) -> TabView { let tabView = TabView() tabView.identifier = identifier @@ -253,7 +267,8 @@ class TabBarView: UIView tabWidth = maximumTabWidth } - for (i, tabView) in tabViews.enumerated() { + var visibleTabIndex = 0 + for tabView in tabViews { tabContainerView.addSubview(tabView) tabView.alpha = tabView.collapsed ? 0.0 : 1.0 @@ -267,13 +282,15 @@ class TabBarView: UIView xOffset += tabView.frame.width - if i == activeTabIndex { + if visibleTabIndex == activeTabIndex { tabView.active = true } else { tabView.active = false } tabView.layoutIfNeeded() + + if !tabView.collapsed { visibleTabIndex += 1 } } tabContainerView.contentSize = CGSize(