From eb2d6607609073124e73f3145b15f641413630fb Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Feb 2024 14:28:01 -0600 Subject: [PATCH 1/4] added a wrapper view for tabs along with constraints so that we can expand and collapse margins based on the tabs configuration Signed-off-by: Matt Bruce --- .../SubNav/SubNavManagerController.swift | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 6a959440..98ca630a 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -22,14 +22,34 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, /// Used to layout the ui. public lazy var stackView: UIStackView = { - let stackView = UIStackView(arrangedSubviews: [tabs, subNavigationController.view]) + let stackView = UIStackView(arrangedSubviews: [tabsWrapper, subNavigationController.view]) stackView.translatesAutoresizingMaskIntoConstraints = false stackView.isAccessibilityElement = false stackView.axis = .vertical return stackView }() + private var tabsLeadingConstraint: NSLayoutConstraint? + private var tabsTrailingConstraint: NSLayoutConstraint? + + private lazy var tabsWrapper: UIView = { + // create the wrapper view for tabs + let tabsWrapper = UIView() + tabsWrapper.translatesAutoresizingMaskIntoConstraints = false + tabsWrapper.addSubview(tabs) + + // tabs constraints on wrapper + tabs.pinTop() + tabs.pinBottom() + tabsLeadingConstraint = tabs.pinLeading(anchor: tabsWrapper.leadingAnchor)?.activate() + tabsTrailingConstraint = tabs.pinTrailing(anchor: tabsWrapper.trailingAnchor)?.activate() + return tabsWrapper + }() + + private var isFillContainer: Bool { tabsModel.tabs.count <= fillContainerTabsCount } + private var tabsModel: TabsModel + public lazy var tabs: Tabs = { let tabs = Tabs(model: tabsModel, delegateObjectIVar, nil) tabs.backgroundColor = (viewController as? PageProtocol)?.pageModel?.navigationBar?.backgroundColor?.uiColor ?? VDSColor.backgroundPrimaryLight @@ -60,7 +80,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, super.init(nibName: nil, bundle: nil) setup(with: loadObject, shouldEnableSwipeGestures: shouldEnableSwipeGestures) } - + public init(viewControllers: [UIViewController], tabsModel: TabsModel, loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) { self.tabsModel = tabsModel self.viewControllers = viewControllers @@ -72,7 +92,11 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, func setup(with loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) { self.loadObject = loadObject pageType = loadObject.pageType - tabs.fillContainer = tabsModel.tabs.count <= fillContainerTabsCount + + //update the tabs + tabs.fillContainer = isFillContainer + updateTabsMargin() + if shouldEnableSwipeGestures { customInteractor = SubNavInteractor(viewController: self) } @@ -126,6 +150,12 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, super.viewWillAppear(animated) hideNavigationBarLine(true) } + /// ensures margin for tabs are correct + private func updateTabsMargin() { + let tabsGutterSpacing = isFillContainer ? 0 : Padding.Component.horizontalPaddingForSize(stackView.bounds.width) + tabsLeadingConstraint?.constant = tabsGutterSpacing + tabsTrailingConstraint?.constant = tabsGutterSpacing + } /// Hides/Shows the navigation bar for the page. open func hideNavigationBarLine(_ isHidden: Bool) { @@ -143,7 +173,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, open override func updateViews() { super.updateViews() if screenSizeChanged() { - tabs.updateView(view.bounds.size.width) + updateTabsMargin() } } From cf0d42b908239ff034dcfffde259f19878186ce7 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Feb 2024 14:49:48 -0600 Subject: [PATCH 2/4] added negative for trailing Signed-off-by: Matt Bruce --- MVMCoreUI/Managers/SubNav/SubNavManagerController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 98ca630a..bf8fbfc4 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -154,7 +154,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, private func updateTabsMargin() { let tabsGutterSpacing = isFillContainer ? 0 : Padding.Component.horizontalPaddingForSize(stackView.bounds.width) tabsLeadingConstraint?.constant = tabsGutterSpacing - tabsTrailingConstraint?.constant = tabsGutterSpacing + tabsTrailingConstraint?.constant = -tabsGutterSpacing } /// Hides/Shows the navigation bar for the page. From 548bb364f32c139eb3977d7c13c47414d4d12503 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Feb 2024 14:50:38 -0600 Subject: [PATCH 3/4] updated type Signed-off-by: Matt Bruce --- MVMCoreUI/Managers/SubNav/SubNavManagerController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index bf8fbfc4..9bf81fa8 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -42,7 +42,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, tabs.pinTop() tabs.pinBottom() tabsLeadingConstraint = tabs.pinLeading(anchor: tabsWrapper.leadingAnchor)?.activate() - tabsTrailingConstraint = tabs.pinTrailing(anchor: tabsWrapper.trailingAnchor)?.activate() + tabsTrailingConstraint = tabs.pinTrailingLessThanOrEqualTo(anchor: tabsWrapper.trailingAnchor)?.activate() return tabsWrapper }() From cc85cfac79c11017ba987c54ffd8c451cfc5d18c Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Thu, 1 Feb 2024 16:30:22 -0600 Subject: [PATCH 4/4] updated for the notes scott left Signed-off-by: Matt Bruce --- MVMCoreUI/Managers/SubNav/SubNavManagerController.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 9bf81fa8..449dff99 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -42,7 +42,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, tabs.pinTop() tabs.pinBottom() tabsLeadingConstraint = tabs.pinLeading(anchor: tabsWrapper.leadingAnchor)?.activate() - tabsTrailingConstraint = tabs.pinTrailingLessThanOrEqualTo(anchor: tabsWrapper.trailingAnchor)?.activate() + tabsTrailingConstraint = tabsWrapper.pinTrailingGreaterThanOrEqualTo(anchor: tabs.trailingAnchor)?.activate() return tabsWrapper }() @@ -154,7 +154,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, private func updateTabsMargin() { let tabsGutterSpacing = isFillContainer ? 0 : Padding.Component.horizontalPaddingForSize(stackView.bounds.width) tabsLeadingConstraint?.constant = tabsGutterSpacing - tabsTrailingConstraint?.constant = -tabsGutterSpacing + tabsTrailingConstraint?.constant = tabsGutterSpacing } /// Hides/Shows the navigation bar for the page. @@ -173,6 +173,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, open override func updateViews() { super.updateViews() if screenSizeChanged() { + tabs.updateView(view.bounds.size.width) updateTabsMargin() } }