Merge branch 'feature/atomic_vds_tabs' into feature/vds_batch_two

This commit is contained in:
Matt Bruce 2024-02-01 16:30:42 -06:00
commit 21afbb55cd

View File

@ -22,14 +22,34 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol,
/// Used to layout the ui. /// Used to layout the ui.
public lazy var stackView: UIStackView = { public lazy var stackView: UIStackView = {
let stackView = UIStackView(arrangedSubviews: [tabs, subNavigationController.view]) let stackView = UIStackView(arrangedSubviews: [tabsWrapper, subNavigationController.view])
stackView.translatesAutoresizingMaskIntoConstraints = false stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.isAccessibilityElement = false stackView.isAccessibilityElement = false
stackView.axis = .vertical stackView.axis = .vertical
return stackView 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 = tabsWrapper.pinTrailingGreaterThanOrEqualTo(anchor: tabs.trailingAnchor)?.activate()
return tabsWrapper
}()
private var isFillContainer: Bool { tabsModel.tabs.count <= fillContainerTabsCount }
private var tabsModel: TabsModel private var tabsModel: TabsModel
public lazy var tabs: Tabs = { public lazy var tabs: Tabs = {
let tabs = Tabs(model: tabsModel, delegateObjectIVar, nil) let tabs = Tabs(model: tabsModel, delegateObjectIVar, nil)
tabs.backgroundColor = (viewController as? PageProtocol)?.pageModel?.navigationBar?.backgroundColor?.uiColor ?? VDSColor.backgroundPrimaryLight 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) super.init(nibName: nil, bundle: nil)
setup(with: loadObject, shouldEnableSwipeGestures: shouldEnableSwipeGestures) setup(with: loadObject, shouldEnableSwipeGestures: shouldEnableSwipeGestures)
} }
public init(viewControllers: [UIViewController], tabsModel: TabsModel, loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) { public init(viewControllers: [UIViewController], tabsModel: TabsModel, loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) {
self.tabsModel = tabsModel self.tabsModel = tabsModel
self.viewControllers = viewControllers self.viewControllers = viewControllers
@ -72,7 +92,11 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol,
func setup(with loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) { func setup(with loadObject: MVMCoreLoadObject, shouldEnableSwipeGestures: Bool) {
self.loadObject = loadObject self.loadObject = loadObject
pageType = loadObject.pageType pageType = loadObject.pageType
tabs.fillContainer = tabsModel.tabs.count <= fillContainerTabsCount
//update the tabs
tabs.fillContainer = isFillContainer
updateTabsMargin()
if shouldEnableSwipeGestures { if shouldEnableSwipeGestures {
customInteractor = SubNavInteractor(viewController: self) customInteractor = SubNavInteractor(viewController: self)
} }
@ -126,6 +150,12 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol,
super.viewWillAppear(animated) super.viewWillAppear(animated)
hideNavigationBarLine(true) 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. /// Hides/Shows the navigation bar for the page.
open func hideNavigationBarLine(_ isHidden: Bool) { open func hideNavigationBarLine(_ isHidden: Bool) {
@ -144,6 +174,7 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol,
super.updateViews() super.updateViews()
if screenSizeChanged() { if screenSizeChanged() {
tabs.updateView(view.bounds.size.width) tabs.updateView(view.bounds.size.width)
updateTabsMargin()
} }
} }