| /* |
| 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 Foundation |
| |
| class BaseCellExample : UIViewController { |
| private let arbitraryCellHeight: CGFloat = 75 |
| fileprivate let baseCellIdentifier: String = "baseCellIdentifier" |
| fileprivate let numberOfCells: Int = 100 |
| |
| private lazy var collectionView: UICollectionView = { |
| return UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout()) |
| }() |
| |
| private var collectionViewLayout: UICollectionViewFlowLayout { |
| return collectionView.collectionViewLayout as! UICollectionViewFlowLayout |
| } |
| |
| private var collectionViewEstimatedCellSize: CGSize { |
| return CGSize(width: collectionView.bounds.size.width - 20, |
| height: arbitraryCellHeight) |
| } |
| |
| override func viewDidLoad() { |
| super.viewDidLoad() |
| parent?.automaticallyAdjustsScrollViewInsets = false |
| automaticallyAdjustsScrollViewInsets = false |
| setUpCollectionView() |
| } |
| |
| override func viewWillLayoutSubviews() { |
| super.viewWillLayoutSubviews() |
| positionCollectionView() |
| } |
| |
| func setUpCollectionView() { |
| collectionViewLayout.estimatedItemSize = collectionViewEstimatedCellSize |
| collectionViewLayout.minimumInteritemSpacing = 5 |
| collectionViewLayout.minimumLineSpacing = 5 |
| collectionView.backgroundColor = .white |
| collectionView.register(MDCBaseCell.self, forCellWithReuseIdentifier: baseCellIdentifier) |
| collectionView.delegate = self |
| collectionView.dataSource = self |
| view.addSubview(collectionView) |
| } |
| |
| func positionCollectionView() { |
| var originX = view.bounds.origin.x |
| var originY = view.bounds.origin.y |
| var width = view.bounds.size.width |
| var height = view.bounds.size.height |
| |
| #if swift(>=3.2) |
| if #available(iOS 11.0, *) { |
| originX += view.safeAreaInsets.left |
| originY += view.safeAreaInsets.top |
| width -= (view.safeAreaInsets.left + view.safeAreaInsets.right) |
| height -= (view.safeAreaInsets.top + view.safeAreaInsets.bottom) |
| } |
| #endif |
| |
| let frame = CGRect(x: originX, y: originY, width: width, height: height); |
| collectionView.frame = frame |
| collectionViewLayout.estimatedItemSize = collectionViewEstimatedCellSize |
| collectionViewLayout.invalidateLayout() |
| collectionView.reloadData() |
| } |
| } |
| |
| extension BaseCellExample: UICollectionViewDelegate { |
| func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) { |
| guard let cell = collectionView.cellForItem(at: indexPath) as? MDCBaseCell else { fatalError() } |
| cell.elevation = ShadowElevation(rawValue: 10) |
| } |
| |
| func collectionView(_ collectionView: UICollectionView, |
| didUnhighlightItemAt indexPath: IndexPath) { |
| guard let cell = collectionView.cellForItem(at: indexPath) as? MDCBaseCell else { fatalError() } |
| cell.elevation = ShadowElevation(rawValue: 0) |
| } |
| } |
| |
| extension BaseCellExample: UICollectionViewDataSource { |
| func numberOfSections(in collectionView: UICollectionView) -> Int { |
| return 1 |
| } |
| |
| func collectionView(_ collectionView: UICollectionView, |
| numberOfItemsInSection section: Int) -> Int { |
| return numberOfCells |
| } |
| |
| func collectionView(_ collectionView: UICollectionView, |
| cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: baseCellIdentifier, |
| for: indexPath) as? MDCBaseCell |
| else { fatalError() } |
| cell.layer.borderColor = UIColor.darkGray.cgColor |
| cell.layer.borderWidth = 1 |
| cell.inkColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1) |
| return cell |
| } |
| } |
| |
| // MARK: Catalog By Convention |
| extension BaseCellExample { |
| @objc class func catalogBreadcrumbs() -> [String] { |
| return ["List Items", "MDCBaseCell Example (Swift)"] |
| } |
| |
| @objc class func catalogIsPrimaryDemo() -> Bool { |
| return true |
| } |
| |
| @objc class func catalogDescription() -> String { |
| return "MDCBaseCell Example (Swift)" |
| } |
| |
| @objc class func catalogIsPresentable() -> Bool { |
| return true |
| } |
| |
| @objc class func catalogIsDebug() -> Bool { |
| return false |
| } |
| } |