Last active
May 14, 2018 05:45
-
-
Save vivekguptaraw/ad1bffa72afe54201a16fc33051c35a3 to your computer and use it in GitHub Desktop.
Revisions
-
vivekguptaraw revised this gist
May 14, 2018 . 1 changed file with 3 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -8,6 +8,8 @@ import UIKit let rightCollectionViewCellSize: CGFloat = 50 class HRScrollDemo: UIViewController { let hrScrollTableView: HRScrollTableView = HRScrollTableView() let leftCellIdentifier = "LeftTableViewCell" @@ -28,7 +30,7 @@ class HRScrollDemo: UIViewController { dataSource.map{ if let _rightArray = $0.value as? [Int]{ self.rightTableArray.append(_rightArray) let arrayWidth = CGFloat(_rightArray.count) * rightCollectionViewCellSize if arrayWidth > rightCellWidth{ //MARK: right table view cell width is calculated as per the maximum element in any child array. rightCellWidth = arrayWidth -
vivekguptaraw created this gist
May 14, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,136 @@ // // HRScrollDemo.swift // DynamicUIDemo // // Created by Vivek Gupta on 11/05/18. // Copyright © 2018 Vivek Gupta. All rights reserved. // import UIKit class HRScrollDemo: UIViewController { let hrScrollTableView: HRScrollTableView = HRScrollTableView() let leftCellIdentifier = "LeftTableViewCell" let rightCellIdentifier = "RightTableViewCell" let dataSource = arrayForBirectional let leftTableArray: [String] = Array(arrayForBirectional.keys) var rightTableArray: [[Int]] = [] override func viewDidLoad() { super.viewDidLoad() self.title = "HRScrollTable" hrScrollTableView.leftTable.register(UINib.init(nibName: "LeftTableViewCell", bundle: nil), forCellReuseIdentifier: leftCellIdentifier) hrScrollTableView.rightTable.register(UINib.init(nibName: "RightTableViewCell", bundle: nil), forCellReuseIdentifier: rightCellIdentifier) self.view.addSubview(hrScrollTableView) self.hrScrollTableView.delegate = self self.hrScrollTableView.reloadTables() self.hrScrollTableView.leftTableWidth = 0.35 * UIScreen.main.bounds.width var rightCellWidth: CGFloat = 0 dataSource.map{ if let _rightArray = $0.value as? [Int]{ self.rightTableArray.append(_rightArray) let arrayWidth = CGFloat(_rightArray.count * 50) if arrayWidth > rightCellWidth{ //MARK: right table view cell width is calculated as per the maximum element in any child array. rightCellWidth = arrayWidth } } } self.hrScrollTableView.rightTableWidth = rightCellWidth self.hrScrollTableView.scrollView.alwaysBounceHorizontal = true DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.3) { self.hrScrollTableView.applyRightShadowToLeftTable() } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() } override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() //MARK: 54 is taken as navigation bar height. You can pass height, width as per your requirement that which you size of control you want hrScrollTableView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height - 54) } } extension HRScrollDemo : HRScrollDelegate{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return leftTableArray.count } func numberOfSectionsInTableView(_ tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, willdisplayCellVG cell: UITableViewCell, indexPath: IndexPath) { if tableView.isEqual(self.hrScrollTableView.rightTable){ guard let rightCell = cell as? RightTableViewCell else{return} rightCell.setCollectionViewDataSourceDelegate(dataSourceDelegate: self.hrScrollTableView, forRow: indexPath.row) } } func tableView(_ tableView: UITableView, atIndexPath: IndexPath) -> UITableViewCell { if tableView.isEqual(self.hrScrollTableView.rightTable){ let cell = self.hrScrollTableView.rightTable.dequeueReusableCell(RightTableViewCell.self, forIndexPath: atIndexPath) return cell }else{ let cell = self.hrScrollTableView.leftTable.dequeueReusableCell(LeftTableViewCell.self, forIndexPath: atIndexPath) cell.labelText.text = "\(leftTableArray[atIndexPath.row])" return cell } } func tableView(_ tableView: UITableView, heightAtIndexPath: IndexPath)->CGFloat { return 50 } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 50 } func tableView(_ tableView: UITableView, headerAtSection: Int) -> UIView { if tableView.isEqual(self.hrScrollTableView.leftTable){ let lblLeft = UILabel(frame: CGRect(x: 0, y: 0, width: self.hrScrollTableView.leftTable.frame.width - 2, height: 50)) lblLeft.textAlignment = .center lblLeft.text = "Left title" lblLeft.backgroundColor = UIColor.lightGray return lblLeft }else{ let vw = UIView(frame: CGRect(x: 0, y: 0, width: self.hrScrollTableView.rightTable.frame.width, height: 50)) let lblRight = UILabel() lblRight.textAlignment = .left lblRight.text = "Right Title" lblRight.sizeToFit() lblRight.lineBreakMode = .byTruncatingTail lblRight.frame = CGRect(x: 50, y: 0, width: lblRight.frame.width, height: 50) vw.addSubview(lblRight) vw.backgroundColor = UIColor.white return vw } } func tableView(_ tableView: UITableView, didSelectIndexPath indexPath: IndexPath) { print(indexPath) } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSectionVG section: Int) -> Int { return rightTableArray[collectionView.tag].count } func collectionView(_ collectionView: UICollectionView, cellForItemAtVG indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(forIndexPath: indexPath) as RightCollectionViewCell cell.labelText.text = "\(rightTableArray[collectionView.tag][indexPath.row])" return cell } func collectionView(_ collectionView: UICollectionView, didSelectVGItemAt indexPath: IndexPath) { print("\(collectionView.tag) \(indexPath)") } }