Commit 4947c6d943c3ebbe243f28289affd172ef4dd631
1 parent
1ad8d946
Exists in
parentassistant
适配布局,优化操作体验
Showing
7 changed files
with
97 additions
and
53 deletions
Show diff stats
ParentAssistant/ParentAssistant.xcworkspace/xcuserdata/caoyang.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type
ParentAssistant/ParentAssistant/Classes/controllers/Grow/GrowViewController.swift
| ... | ... | @@ -51,11 +51,11 @@ class GrowViewController: UIViewController,UIScrollViewDelegate { |
| 51 | 51 | view.addSubview(imageView) |
| 52 | 52 | return view |
| 53 | 53 | }() |
| 54 | - | |
| 54 | + //导航栏左侧按钮 | |
| 55 | 55 | var titleLeftLab = UILabel() |
| 56 | - | |
| 57 | - var childDataModel = StudentClassInfoModel() | |
| 58 | - | |
| 56 | + //当前显示的控制器 | |
| 57 | + var nowIndex = 0 | |
| 58 | + | |
| 59 | 59 | //是否显示右侧按钮 |
| 60 | 60 | var rightBtn = UIBarButtonItem() |
| 61 | 61 | |
| ... | ... | @@ -94,12 +94,10 @@ class GrowViewController: UIViewController,UIScrollViewDelegate { |
| 94 | 94 | maker.centerX.equalTo((CGFloat(i)+0.5)*width) |
| 95 | 95 | maker.centerY.equalTo(contentScrollView) |
| 96 | 96 | } |
| 97 | - | |
| 98 | - print("childView Frame=\(vc.view.frame)") | |
| 99 | 97 | } |
| 100 | 98 | //设置scrollview滑动范围 |
| 101 | 99 | contentScrollView.contentSize = CGSize.init(width: width*CGFloat(titleArr.count), height: 0) |
| 102 | -// contentScrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: true) | |
| 100 | + contentScrollView.setContentOffset(CGPoint.init(x: CGFloat(nowIndex)*width, y: 0), animated: true) | |
| 103 | 101 | } |
| 104 | 102 | |
| 105 | 103 | override func viewWillAppear(_ animated: Bool) { |
| ... | ... | @@ -273,26 +271,7 @@ class GrowViewController: UIViewController,UIScrollViewDelegate { |
| 273 | 271 | let index = CGFloat(btn.tag) |
| 274 | 272 | |
| 275 | 273 | if contentScrollView.contentSize.width>0 { |
| 276 | - | |
| 277 | -// let childVC = self.childViewControllers[btn.tag] | |
| 278 | 274 | contentScrollView.setContentOffset(CGPoint.init(x: index*contentScrollView.bounds.size.width, y: 0), animated: true) |
| 279 | - | |
| 280 | -// if self.contentScrollView.subviews.contains(childVC.view){ | |
| 281 | -// //已有view,直接移动 | |
| 282 | -// //移动scrollview | |
| 283 | -// viewDidLayoutSubviews() | |
| 284 | -// contentScrollView.setContentOffset(CGPoint.init(x: index*contentScrollView.bounds.size.width, y: 0), animated: true) | |
| 285 | -// }else{ | |
| 286 | -// //新加view,刷新数据 | |
| 287 | -// self.contentScrollView.addSubview(childVC.view) | |
| 288 | -// childVC.view.snp.makeConstraints { (maker) in | |
| 289 | -// maker.width.height.equalTo(self.contentScrollView) | |
| 290 | -// maker.centerX.equalTo((index+0.5)*contentScrollView.bounds.size.width) | |
| 291 | -// maker.centerY.equalTo(self.contentScrollView) | |
| 292 | -// } | |
| 293 | -// //移动scrollview | |
| 294 | -// contentScrollView.setContentOffset(CGPoint.init(x: index*screenWidth, y: 0), animated: true) | |
| 295 | -// } | |
| 296 | 275 | } |
| 297 | 276 | if btn.tag == 0 { |
| 298 | 277 | self.navigationItem.rightBarButtonItem = nil |
| ... | ... | @@ -301,11 +280,22 @@ class GrowViewController: UIViewController,UIScrollViewDelegate { |
| 301 | 280 | } |
| 302 | 281 | } |
| 303 | 282 | //MARK: - ScrollView Delegate |
| 283 | + func scrollViewDidScroll(_ scrollView: UIScrollView) { | |
| 284 | + let vc = self.childViewControllers[1] as! ReportViewController | |
| 285 | + scrollView.isScrollEnabled = vc.calendar.isHidden | |
| 286 | + vc.calendar.backBlock = { | |
| 287 | + DebugLog("日期消失,解除滑动锁定!") | |
| 288 | + scrollView.isScrollEnabled = true | |
| 289 | + } | |
| 290 | + } | |
| 291 | + | |
| 304 | 292 | func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { |
| 305 | 293 | |
| 306 | 294 | if scrollView == contentScrollView { |
| 307 | 295 | let offsetX = scrollView.contentOffset.x |
| 308 | 296 | let index = Int(offsetX/getScreenWidth()) |
| 297 | + //标记当前位置 | |
| 298 | + nowIndex = index | |
| 309 | 299 | let btn = titleBtnArr[index] |
| 310 | 300 | clickTitleAction(btn: btn) |
| 311 | 301 | } | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/Report/MoralViewController.swift
| ... | ... | @@ -12,7 +12,7 @@ class MoralViewController: UIViewController,UITableViewDelegate,UITableViewDataS |
| 12 | 12 | |
| 13 | 13 | lazy var tableView = {()->UITableView in |
| 14 | 14 | |
| 15 | - let table = UITableView.init(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: screenHeight-navigationBarHeight!-statusBarHeight-10)) | |
| 15 | + let table = UITableView.init(frame: self.view.bounds) | |
| 16 | 16 | table.backgroundColor = backGroundColor |
| 17 | 17 | table.delegate = self |
| 18 | 18 | table.dataSource = self |
| ... | ... | @@ -30,8 +30,12 @@ class MoralViewController: UIViewController,UITableViewDelegate,UITableViewDataS |
| 30 | 30 | self.title = "德育报告" |
| 31 | 31 | self.view.backgroundColor = backGroundColor |
| 32 | 32 | self.view.addSubview(self.tableView) |
| 33 | - | |
| 34 | - | |
| 33 | + tableView.snp.makeConstraints { (maker) in | |
| 34 | + maker.width.equalToSuperview() | |
| 35 | + maker.bottom.equalToSuperview() | |
| 36 | + maker.top.equalToSuperview() | |
| 37 | + maker.centerX.equalToSuperview() | |
| 38 | + } | |
| 35 | 39 | downLoadDataFromNet() |
| 36 | 40 | } |
| 37 | 41 | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/Report/ReportViewController.swift
| ... | ... | @@ -39,13 +39,24 @@ class ReportViewController: UIViewController,UITableViewDelegate,UITableViewData |
| 39 | 39 | self.view.addSubview(self.reportTable) |
| 40 | 40 | reportTable.snp.makeConstraints { (maker) in |
| 41 | 41 | maker.width.equalToSuperview() |
| 42 | - maker.height.equalTo(self.view.frame.size.height-60-44) | |
| 42 | + maker.bottom.equalToSuperview() | |
| 43 | 43 | maker.top.equalTo(60) |
| 44 | 44 | maker.centerX.equalToSuperview() |
| 45 | 45 | } |
| 46 | + | |
| 47 | + calendar = CalendarView.init(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: 245)) | |
| 48 | + self.view.addSubview(calendar) | |
| 49 | + calendar.snp.makeConstraints { (maker) in | |
| 50 | + maker.width.equalToSuperview() | |
| 51 | + maker.height.equalTo(245) | |
| 52 | + maker.centerX.equalToSuperview() | |
| 53 | + maker.top.equalTo(headView) | |
| 54 | + } | |
| 55 | + calendar.isHidden = true | |
| 46 | 56 | } |
| 47 | 57 | override func viewDidLayoutSubviews() { |
| 48 | - | |
| 58 | + DebugLog("横屏") | |
| 59 | + DebugLog(self.view.frame.height) | |
| 49 | 60 | } |
| 50 | 61 | |
| 51 | 62 | // MARK: - 设置日期View |
| ... | ... | @@ -63,9 +74,7 @@ class ReportViewController: UIViewController,UITableViewDelegate,UITableViewData |
| 63 | 74 | let recognizer = UISwipeGestureRecognizer.init(target: self, action: #selector(showView)) |
| 64 | 75 | recognizer.direction = UISwipeGestureRecognizerDirection.down |
| 65 | 76 | headView.addGestureRecognizer(recognizer) |
| 66 | - | |
| 67 | - calendar = CalendarView.init(frame: CGRect.init(x: 0, y: y*2, width: screenWidth, height: 245)) | |
| 68 | - | |
| 77 | + | |
| 69 | 78 | } |
| 70 | 79 | |
| 71 | 80 | @objc func showView(){ | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/Report/SceneDetailViewController.swift
| ... | ... | @@ -11,7 +11,7 @@ import UIKit |
| 11 | 11 | class SceneDetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { |
| 12 | 12 | |
| 13 | 13 | lazy var sceneTableView = {()->UITableView in |
| 14 | - let table = UITableView.init(frame: CGRect.init(x: 0, y: 0, width: screenWidth, height: screenHeight-navigationBarHeight!-statusBarHeight-10)) | |
| 14 | + let table = UITableView.init(frame: self.view.bounds) | |
| 15 | 15 | table.backgroundColor = backGroundColor |
| 16 | 16 | table.delegate = self |
| 17 | 17 | table.dataSource = self |
| ... | ... | @@ -28,7 +28,12 @@ class SceneDetailViewController: UIViewController,UITableViewDataSource,UITableV |
| 28 | 28 | self.title = "场景详情" |
| 29 | 29 | self.view.backgroundColor = backGroundColor |
| 30 | 30 | self.view.addSubview(self.sceneTableView) |
| 31 | - | |
| 31 | + sceneTableView.snp.makeConstraints { (maker) in | |
| 32 | + maker.width.equalToSuperview() | |
| 33 | + maker.bottom.equalToSuperview() | |
| 34 | + maker.top.equalToSuperview() | |
| 35 | + maker.centerX.equalToSuperview() | |
| 36 | + } | |
| 32 | 37 | } |
| 33 | 38 | func numberOfSections(in tableView: UITableView) -> Int { |
| 34 | 39 | return 3 | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/ReportView/CalendarView.swift
| ... | ... | @@ -10,6 +10,9 @@ import UIKit |
| 10 | 10 | |
| 11 | 11 | class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 12 | 12 | |
| 13 | + ///通知父控制器解除滑动限制 | |
| 14 | + typealias CloseWindowBlock = ()->() | |
| 15 | + | |
| 13 | 16 | var keyWindow = UIWindow() |
| 14 | 17 | var backBtn = UIButton() |
| 15 | 18 | var topBtn = UIButton() |
| ... | ... | @@ -18,10 +21,23 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 18 | 21 | var monthDay = Int() |
| 19 | 22 | var todayDay = Int() |
| 20 | 23 | |
| 24 | + var viewWidth = CGFloat() | |
| 25 | + var viewHeight = CGFloat() | |
| 26 | + | |
| 27 | + var backBlock : CloseWindowBlock? | |
| 28 | + | |
| 29 | + | |
| 21 | 30 | override init(frame: CGRect) { |
| 22 | 31 | super.init(frame: frame) |
| 23 | 32 | if !frame.isEmpty{ |
| 33 | + viewWidth = frame.width | |
| 34 | + viewWidth = frame.height | |
| 35 | + self.backgroundColor = UIColor.orange | |
| 24 | 36 | self.addSubview(self.collectionView) |
| 37 | + collectionView.snp.makeConstraints { (maker) in | |
| 38 | + maker.center.equalToSuperview() | |
| 39 | + maker.height.width.equalToSuperview() | |
| 40 | + } | |
| 25 | 41 | firstDay = CalendarDateManager.shared.getFirstMonthDays() |
| 26 | 42 | monthDay = CalendarDateManager.shared.getCurrentMonthDay() |
| 27 | 43 | todayDay = CalendarDateManager.shared.getTodayDate() |
| ... | ... | @@ -30,11 +46,15 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 30 | 46 | override func layoutSubviews() { |
| 31 | 47 | |
| 32 | 48 | self.flowlayOut.itemSize = CGSize.init(width: self.bounds.size.width/7, height: 35) |
| 49 | + viewWidth = self.bounds.size.width | |
| 50 | + viewHeight = self.bounds.size.height | |
| 51 | + | |
| 33 | 52 | } |
| 53 | + | |
| 34 | 54 | lazy var flowlayOut = {()-> UICollectionViewFlowLayout in |
| 35 | 55 | //设置layout |
| 36 | 56 | let flowlayout = UICollectionViewFlowLayout() |
| 37 | - flowlayout.itemSize = CGSize.init(width: self.bounds.size.width/7, height:35) | |
| 57 | + flowlayout.itemSize = CGSize.init(width: viewWidth/7, height:35) | |
| 38 | 58 | flowlayout.minimumLineSpacing = 0 |
| 39 | 59 | flowlayout.minimumInteritemSpacing = 0 |
| 40 | 60 | flowlayout.headerReferenceSize = CGSize.init(width: 0, height: 0) |
| ... | ... | @@ -45,7 +65,7 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 45 | 65 | |
| 46 | 66 | lazy var collectionView = {()-> UICollectionView in |
| 47 | 67 | |
| 48 | - let calendarView = UICollectionView.init(frame: self.bounds, collectionViewLayout: flowlayOut) | |
| 68 | + let calendarView = UICollectionView.init(frame: self.bounds, collectionViewLayout: self.flowlayOut) | |
| 49 | 69 | calendarView.delegate = self |
| 50 | 70 | calendarView.dataSource = self |
| 51 | 71 | calendarView.backgroundColor = UIColor.white |
| ... | ... | @@ -59,19 +79,27 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 59 | 79 | |
| 60 | 80 | let key = UIApplication.shared.keyWindow! |
| 61 | 81 | |
| 62 | - let top = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: self.bounds.size.width, height: self.frame.origin.y)) | |
| 82 | + let top = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: viewWidth, height: statusBarHeight+navigationBarHeight!)) | |
| 63 | 83 | top.backgroundColor = UIColor.clear |
| 64 | - top.addTarget(self, action: #selector(closeView(btn:)), for: UIControlEvents.allEvents) | |
| 84 | + top.addTarget(self, action: #selector(closeView), for: UIControlEvents.allEvents) | |
| 65 | 85 | |
| 66 | - let back = UIButton.init(frame: CGRect.init(x: 0, y: self.bounds.size.height, width: screenWidth, height: screenHeight)) | |
| 86 | + let back = UIButton.init(frame: CGRect.init(x: 0, y: viewHeight+statusBarHeight+navigationBarHeight!, width: viewWidth, height: screenHeight*2)) | |
| 67 | 87 | back.backgroundColor = UIColor.black |
| 68 | 88 | back.alpha = 0.4 |
| 69 | - back.addTarget(self, action: #selector(closeView(btn:)), for: UIControlEvents.allEvents) | |
| 89 | + back.addTarget(self, action: #selector(closeView), for: UIControlEvents.allEvents) | |
| 70 | 90 | |
| 71 | 91 | key.addSubview(top) |
| 72 | 92 | key.addSubview(back) |
| 73 | - key.addSubview(self) | |
| 74 | - | |
| 93 | + top.snp.makeConstraints { (maker) in | |
| 94 | + maker.width.equalToSuperview() | |
| 95 | + maker.height.equalTo(statusBarHeight+navigationBarHeight!) | |
| 96 | + maker.top.equalToSuperview() | |
| 97 | + } | |
| 98 | + back.snp.makeConstraints { (maker) in | |
| 99 | + maker.width.equalToSuperview() | |
| 100 | + maker.height.equalToSuperview() | |
| 101 | + maker.top.equalTo(viewHeight+statusBarHeight+navigationBarHeight!) | |
| 102 | + } | |
| 75 | 103 | self.isHidden = false |
| 76 | 104 | keyWindow = key |
| 77 | 105 | backBtn = back |
| ... | ... | @@ -79,14 +107,14 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 79 | 107 | |
| 80 | 108 | } |
| 81 | 109 | //MARK: - 关闭视图 |
| 82 | - @objc func closeView(btn:UIButton) { | |
| 110 | + @objc private func closeView() { | |
| 111 | + | |
| 112 | + self.backBlock!() | |
| 113 | + self.backBtn.removeFromSuperview() | |
| 114 | + self.topBtn.removeFromSuperview() | |
| 115 | + self.keyWindow = UIWindow.init() | |
| 116 | + self.isHidden = true | |
| 83 | 117 | |
| 84 | - UIView.animate(withDuration: 0.3) { | |
| 85 | - self.backBtn.removeFromSuperview() | |
| 86 | - self.topBtn.removeFromSuperview() | |
| 87 | - self.keyWindow = UIWindow.init() | |
| 88 | - self.isHidden = true | |
| 89 | - } | |
| 90 | 118 | } |
| 91 | 119 | |
| 92 | 120 | //MARK: - Delegate |
| ... | ... | @@ -98,7 +126,6 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 98 | 126 | |
| 99 | 127 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "calendarCell", for: indexPath) |
| 100 | 128 | let lab = UILabel.init(frame: cell.bounds) |
| 101 | - | |
| 102 | 129 | if indexPath.row < weekLab.count { |
| 103 | 130 | lab.text = weekLab[indexPath.row] |
| 104 | 131 | }else{ |
| ... | ... | @@ -121,6 +148,10 @@ class CalendarView: UIView,UICollectionViewDelegate,UICollectionViewDataSource { |
| 121 | 148 | |
| 122 | 149 | lab.textAlignment = .center |
| 123 | 150 | cell.addSubview(lab) |
| 151 | + lab.snp.makeConstraints { (maker) in | |
| 152 | + maker.center.equalToSuperview() | |
| 153 | + maker.height.width.equalToSuperview() | |
| 154 | + } | |
| 124 | 155 | return cell |
| 125 | 156 | |
| 126 | 157 | } | ... | ... |
ParentAssistant/ParentAssistant/Classes/controllers/Grow/View/ReportView/SceneMiddleCell.swift
| ... | ... | @@ -32,7 +32,12 @@ class SceneMiddleCell: UITableViewCell { |
| 32 | 32 | customLineChart.drawLine(point: arr3, color: UIColorWithRGB(R: 255, G: 213, B: 79)) |
| 33 | 33 | |
| 34 | 34 | self.addSubview(customLineChart) |
| 35 | - | |
| 35 | + customLineChart.snp.makeConstraints { (maker) in | |
| 36 | + maker.top.equalTo(60) | |
| 37 | + maker.left.equalTo(20) | |
| 38 | + maker.right.equalTo(20) | |
| 39 | + maker.bottom.equalToSuperview() | |
| 40 | + } | |
| 36 | 41 | } |
| 37 | 42 | |
| 38 | 43 | override func setSelected(_ selected: Bool, animated: Bool) { | ... | ... |