| // Copyright 2018-present the Material Components for iOS authors. All Rights Reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| import UIKit | |
| import MaterialComponents.MaterialBottomNavigation | |
| import MaterialComponents.MaterialBottomNavigation_BottomNavigationController | |
| import MaterialComponents.MaterialBottomNavigation_Theming | |
| import MaterialComponents.MaterialContainerScheme | |
| class BottomNavigationControllerExampleFixedChildViewController: UIViewController { | |
| @objc var containerScheme: MDCContainerScheming = MDCContainerScheme() | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| self.view.backgroundColor = containerScheme.colorScheme.secondaryColor | |
| } | |
| override var prefersHomeIndicatorAutoHidden: Bool { | |
| return false | |
| } | |
| override var preferredStatusBarStyle: UIStatusBarStyle { | |
| return .default | |
| } | |
| override var prefersStatusBarHidden: Bool { | |
| return false | |
| } | |
| } | |
| class BottomNavigationControllerExampleScrollableChildViewController: UICollectionViewController { | |
| let numberOfItems = 200 | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| collectionView.dataSource = self | |
| collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell") | |
| if #available(iOS 11.0, *) { | |
| collectionView.contentInsetAdjustmentBehavior = .always | |
| collectionView.insetsLayoutMarginsFromSafeArea = true | |
| } | |
| } | |
| override func numberOfSections(in collectionView: UICollectionView) -> Int { | |
| return 1 | |
| } | |
| override func collectionView( | |
| _ collectionView: UICollectionView, numberOfItemsInSection section: Int | |
| ) -> Int { | |
| return numberOfItems | |
| } | |
| override func collectionView( | |
| _ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath | |
| ) -> UICollectionViewCell { | |
| let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) | |
| let hue = CGFloat(indexPath.row) / CGFloat(numberOfItems) | |
| cell.backgroundColor = UIColor(hue: hue, saturation: 1, brightness: 1, alpha: 1) | |
| return cell | |
| } | |
| override var prefersStatusBarHidden: Bool { | |
| return true | |
| } | |
| override var preferredStatusBarStyle: UIStatusBarStyle { | |
| return .lightContent | |
| } | |
| override var prefersHomeIndicatorAutoHidden: Bool { | |
| return true | |
| } | |
| } | |
| @available(iOS 12, *) | |
| class BottomNavigationControllerExampleViewController: MDCBottomNavigationBarController { | |
| var containerScheme: MDCContainerScheming = MDCContainerScheme() { | |
| didSet { | |
| apply(containerScheme: containerScheme) | |
| } | |
| } | |
| override func viewDidLoad() { | |
| super.viewDidLoad() | |
| self.navigationBar.alignment = .justifiedAdjacentTitles | |
| let flowLayout = UICollectionViewFlowLayout() | |
| flowLayout.estimatedItemSize = CGSize(width: 96, height: 48) | |
| let viewController1 = BottomNavigationControllerExampleScrollableChildViewController( | |
| collectionViewLayout: flowLayout) | |
| viewController1.collectionView.backgroundColor = containerScheme.colorScheme.primaryColorVariant | |
| viewController1.tabBarItem = UITabBarItem( | |
| title: "Item 1", image: UIImage(named: "ic_home"), tag: 0) | |
| let viewController2 = BottomNavigationControllerExampleFixedChildViewController() | |
| viewController2.containerScheme = containerScheme | |
| viewController2.tabBarItem = UITabBarItem( | |
| title: "Item 2", image: UIImage(named: "ic_favorite"), tag: 1) | |
| let viewController3 = UIViewController() | |
| viewController3.view.backgroundColor = containerScheme.colorScheme.surfaceColor | |
| viewController3.tabBarItem = UITabBarItem( | |
| title: "Item 3", image: UIImage(named: "ic_search"), tag: 2) | |
| viewControllers = [viewController1, viewController2, viewController3] | |
| } | |
| @objc class func catalogMetadata() -> [String: Any] { | |
| return [ | |
| "breadcrumbs": ["Bottom Navigation", "Bottom Navigation Controller"], | |
| "presentable": false, | |
| ] | |
| } | |
| } | |
| // MARK: Private Functions | |
| @available(iOS 12, *) | |
| extension BottomNavigationControllerExampleViewController { | |
| fileprivate func apply(containerScheme: MDCContainerScheming) { | |
| navigationBar.applyPrimaryTheme(withScheme: containerScheme) | |
| } | |
| } |