From c73bd06853d718d35d00dc3639a6ef77ccab6782 Mon Sep 17 00:00:00 2001 From: Scott Pfeil Date: Tue, 8 Mar 2022 14:47:32 -0500 Subject: [PATCH] SubNavManager fixes --- .../HorizontalCombinationViews/Tabs.swift | 13 ++++++--- .../TabsModel.swift | 4 +-- .../SubNav/SubNavManagerController.swift | 29 ++++++++++--------- .../SubNavManagerNavigationController.swift | 2 +- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift index 5802ddf8..290ced62 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/Tabs.swift @@ -23,7 +23,7 @@ import UIKit var additionalData: [AnyHashable: Any]? let layout = UICollectionViewFlowLayout() - public var collectionView: UICollectionView? + public var collectionView: CollectionView? let bottomScrollView = UIScrollView(frame: .zero) let bottomContentView = View() @@ -61,6 +61,7 @@ import UIKit open override func updateView(_ size: CGFloat) { super.updateView(size) + collectionView?.updateView(size) } open override func setupView() { @@ -76,7 +77,7 @@ import UIKit layout.scrollDirection = .horizontal layout.minimumLineSpacing = 0 - let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout) + let collectionView = CollectionView(frame: .zero, collectionViewLayout: layout) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.register(TabItemCell.self, forCellWithReuseIdentifier: TabCellId) collectionView.backgroundColor = .clear @@ -172,6 +173,7 @@ extension Tabs: UICollectionViewDataSource { return UICollectionViewCell() } cell.updateCell(labelModel: labelModel, indexPath: indexPath, delegateObject: delegateObject, additionalData: additionalData, selected: indexPath.row == selectedIndex, tabsModel: tabsModel) + updateView(collectionView.bounds.width) return cell } } @@ -317,7 +319,6 @@ extension Tabs { @objcMembers public class TabItemCell: CollectionViewCell { public let label = Label() - public var labelModel: LabelModel? public override func setupView() { super.setupView() @@ -326,10 +327,14 @@ extension Tabs { label.baselineAdjustment = .alignCenters } + public override func updateView(_ size: CGFloat) { + super.updateView(size) + label.updateView(size) + } + public func updateCell(labelModel: LabelModel, indexPath: IndexPath, delegateObject: MVMCoreUIDelegateObject?, additionalData: [AnyHashable: Any]?, selected: Bool, tabsModel: TabsModel?) { label.reset() label.set(with: labelModel, delegateObject, additionalData) - self.labelModel = labelModel if selected { label.textColor = tabsModel?.selectedColor.uiColor ?? .black } else { diff --git a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabsModel.swift b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabsModel.swift index 398d7c59..64f8df4d 100644 --- a/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabsModel.swift +++ b/MVMCoreUI/Atomic/Molecules/HorizontalCombinationViews/TabsModel.swift @@ -54,8 +54,8 @@ public class TabsModel: MoleculeModelProtocol { public class TabItemModel: Codable { - var label: LabelModel - var action: ActionModelProtocol? + public var label: LabelModel + public var action: ActionModelProtocol? init(label: LabelModel) { self.label = label diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift index 19a8c4fd..c33d0238 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerController.swift @@ -16,6 +16,15 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, /// A list of cached controllers. private var viewControllers: [UIViewController?] + + /// Used to layout the ui. + public lazy var stackView: UIStackView = { + let stackView = UIStackView(arrangedSubviews: [tabs, line, subNavigationController.view]) + stackView.translatesAutoresizingMaskIntoConstraints = false + stackView.isAccessibilityElement = false + stackView.axis = .vertical + return stackView + }() private var tabsModel: TabsModel public lazy var tabs: Tabs = { @@ -79,24 +88,16 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol, open override func loadView() { let view = View() view.translatesAutoresizingMaskIntoConstraints = true - - view.addSubview(tabs) - view.addSubview(line) + addChild(subNavigationController) - view.addSubview(subNavigationController.view) + view.addSubview(stackView) subNavigationController.didMove(toParent: self) NSLayoutConstraint.activate([ - tabs.leadingAnchor.constraint(equalTo: view.leadingAnchor), - view.trailingAnchor.constraint(equalTo: tabs.trailingAnchor), - line.leadingAnchor.constraint(equalTo: view.leadingAnchor), - view.trailingAnchor.constraint(equalTo: line.trailingAnchor), - subNavigationController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor), - view.trailingAnchor.constraint(equalTo: subNavigationController.view.trailingAnchor), - tabs.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), - line.topAnchor.constraint(equalTo: tabs.bottomAnchor), - subNavigationController.view.topAnchor.constraint(equalTo: line.bottomAnchor), - view.bottomAnchor.constraint(equalTo: subNavigationController.view.bottomAnchor) + stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor), + view.trailingAnchor.constraint(equalTo: stackView.trailingAnchor), + stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + view.bottomAnchor.constraint(equalTo: stackView.bottomAnchor) ]) self.view = view } diff --git a/MVMCoreUI/Managers/SubNav/SubNavManagerNavigationController.swift b/MVMCoreUI/Managers/SubNav/SubNavManagerNavigationController.swift index eb9dc5bd..16b691d2 100644 --- a/MVMCoreUI/Managers/SubNav/SubNavManagerNavigationController.swift +++ b/MVMCoreUI/Managers/SubNav/SubNavManagerNavigationController.swift @@ -8,7 +8,7 @@ import Foundation -/// The navigation controller that the tabbarpagecontrol uses for the children controllers. It always has the navigation bar hidden. +/// The navigation controller that the SubNavManager uses for the children controllers. It always has the navigation bar hidden. @objc public class SubNavManagerNavigationController: UINavigationController { public override init(rootViewController: UIViewController) {