Commit 197c47b3 authored by Steven杜宇's avatar Steven杜宇

// 待完善清单

parent 92a60783
...@@ -16,7 +16,6 @@ import TYSnapshotScroll ...@@ -16,7 +16,6 @@ import TYSnapshotScroll
class YHMyFileListViewController: YHBaseViewController { class YHMyFileListViewController: YHBaseViewController {
let topSegmentHeight = 48.0 let topSegmentHeight = 48.0
var orderId : Int = 0 var orderId : Int = 0
var items:[YHFileListModel] = [] var items:[YHFileListModel] = []
lazy var titles:[String] = [] lazy var titles:[String] = []
...@@ -51,7 +50,6 @@ class YHMyFileListViewController: YHBaseViewController { ...@@ -51,7 +50,6 @@ class YHMyFileListViewController: YHBaseViewController {
lazy var tableView: UITableView = { lazy var tableView: UITableView = {
let tableView = UITableView(frame: CGRect.zero, style:.grouped) let tableView = UITableView(frame: CGRect.zero, style:.grouped)
tableView.contentInsetAdjustmentBehavior = .never tableView.contentInsetAdjustmentBehavior = .never
tableView.estimatedSectionHeaderHeight = 1.0
tableView.showsVerticalScrollIndicator = false tableView.showsVerticalScrollIndicator = false
tableView.backgroundColor = UIColor.init(hex: 0xDCE4F1) tableView.backgroundColor = UIColor.init(hex: 0xDCE4F1)
tableView.separatorStyle = .none tableView.separatorStyle = .none
...@@ -60,7 +58,21 @@ class YHMyFileListViewController: YHBaseViewController { ...@@ -60,7 +58,21 @@ class YHMyFileListViewController: YHBaseViewController {
tableView.delegate = self tableView.delegate = self
tableView.dataSource = self tableView.dataSource = self
tableView.tableHeaderView = self.headerView tableView.tableHeaderView = self.headerView
tableView.isHidden = true return tableView
}()
lazy var fakeTableView: UITableView = {
let tableView = UITableView(frame: CGRect.zero, style:.grouped)
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
tableView.backgroundColor = UIColor.init(hex: 0xDCE4F1)
tableView.separatorStyle = .none
tableView.register(YHMyFileListCell.self, forCellReuseIdentifier: YHMyFileListCell.cellReuseIdentifier)
tableView.register(YHMyFileListNoneCell.self, forCellReuseIdentifier: YHMyFileListNoneCell.cellReuseIdentifier)
tableView.delegate = self
tableView.dataSource = self
let view = UIView(frame: self.headerView.frame)
tableView.tableHeaderView = view
return tableView return tableView
}() }()
...@@ -170,11 +182,17 @@ class YHMyFileListViewController: YHBaseViewController { ...@@ -170,11 +182,17 @@ class YHMyFileListViewController: YHBaseViewController {
} }
return view return view
}() }()
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.contentSize = self.fakeTableView.contentSize
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
gk_navigationBar.isHidden = true gk_navigationBar.isHidden = true
self.view.backgroundColor = UIColor.init(hex: 0xDCE4F1) self.view.backgroundColor = UIColor.init(hex: 0xDCE4F1)
self.view.addSubview(self.fakeTableView)
self.view.addSubview(self.tableView) self.view.addSubview(self.tableView)
self.view.addSubview(self.bottomView) self.view.addSubview(self.bottomView)
self.view.addSubview(self.navStatusBar) self.view.addSubview(self.navStatusBar)
...@@ -196,6 +214,11 @@ class YHMyFileListViewController: YHBaseViewController { ...@@ -196,6 +214,11 @@ class YHMyFileListViewController: YHBaseViewController {
make.left.right.equalToSuperview() make.left.right.equalToSuperview()
make.bottom.equalTo(self.bottomView.snp.top) make.bottom.equalTo(self.bottomView.snp.top)
} }
fakeTableView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.right.equalToSuperview()
make.bottom.equalTo(self.bottomView.snp.top)
}
bottomView.snp.makeConstraints { make in bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview() make.left.right.bottom.equalToSuperview()
make.height.equalTo(k_Height_safeAreaInsetsBottom()+64.0) make.height.equalTo(k_Height_safeAreaInsetsBottom()+64.0)
...@@ -231,22 +254,22 @@ class YHMyFileListViewController: YHBaseViewController { ...@@ -231,22 +254,22 @@ class YHMyFileListViewController: YHBaseViewController {
func scrollToSection(_ section:Int) { func scrollToSection(_ section:Int) {
if 0 <= section && section < self.items.count { if 0 <= section && section < self.items.count {
self.tableView.scrollToRow(at: IndexPath(row: 0, section: section), at: .top, animated: true) // 自定义布局contentSize计算不准导致setContentOffset失效故采用此方法
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: { // fakeTableView 设计目的 1、每次刷新数据自动滚动到底部才能算完contentSize 2、scrollToRow后更正偏移会有抖动
printLog("fakeTableView.contentSize \(self.fakeTableView.contentSize)")
self.tableView.contentSize = self.fakeTableView.contentSize
self.fakeTableView.scrollToRow(at: IndexPath(row: 0, section: section), at: .top, animated: false)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2, execute: {
var gap = 0.0 var gap = 0.0
// 此处处理内容总长度不够滚到相应tab的差距 // 此处处理内容总长度不够滚到相应tab的差距
let sectionRect = self.tableView.rectForHeader(inSection: section) let sectionRect = self.fakeTableView.rectForHeader(inSection: section)
if self.tableView.contentOffset.y >= 0.0, sectionRect.origin.y > self.tableView.contentOffset.y { if self.fakeTableView.contentOffset.y >= 0.0, sectionRect.origin.y > self.fakeTableView.contentOffset.y {
gap = sectionRect.origin.y - self.tableView.contentOffset.y gap = sectionRect.origin.y - self.fakeTableView.contentOffset.y
} }
let offsetY = self.tableView.contentOffset.y-k_Height_NavigationtBarAndStatuBar-self.topSegmentHeight+gap let offsetY = self.fakeTableView.contentOffset.y-k_Height_NavigationtBarAndStatuBar-self.topSegmentHeight+gap
let maxOffSetY = self.tableView.contentSize.height-self.tableView.frame.size.height self.tableView.setContentOffset(CGPointMake(0, offsetY+4), animated: true)
// if abs(offsetY) <= maxOffSetY {
// 此处+2是弥补section结合处偏差与tab显示
self.tableView.setContentOffset(CGPointMake(0, offsetY+4), animated: false)
// } else {
// self.tableView.setContentOffset(CGPointMake(0, maxOffSetY-1), animated: false)
// }
}) })
} }
} }
...@@ -377,39 +400,19 @@ extension YHMyFileListViewController : UITableViewDelegate, UITableViewDataSourc ...@@ -377,39 +400,19 @@ extension YHMyFileListViewController : UITableViewDelegate, UITableViewDataSourc
return 0.01 return 0.01
} }
func scrollViewDidScroll(_ scrollView: UIScrollView) { func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == self.fakeTableView {
return
}
printLog("offset: \(scrollView.contentOffset.y)") printLog("offset: \(scrollView.contentOffset.y)")
let segmentHeight = self.items.count <= 1 ? 0.0 : 46.0 let segmentHeight = self.items.count <= 1 ? 0.0 : 46.0
let gap = self.consentInsetTop-k_Height_NavigationtBarAndStatuBar-self.topSegmentHeight+segmentHeight let gap = self.consentInsetTop-k_Height_NavigationtBarAndStatuBar-self.topSegmentHeight+segmentHeight
self.navStatusBar.backgroundColor = scrollView.contentOffset.y > gap ? UIColor.white : UIColor.clear self.navStatusBar.backgroundColor = scrollView.contentOffset.y > gap ? UIColor.white : UIColor.clear
self.topSegmentView.backgroundColor = scrollView.contentOffset.y > gap ? UIColor.white : UIColor.clear self.topSegmentView.backgroundColor = scrollView.contentOffset.y > gap ? UIColor.white : UIColor.clear
self.topSegmentView.isHidden = scrollView.contentOffset.y < gap self.topSegmentView.isHidden = scrollView.contentOffset.y < gap
// 滚动到哪个section 对应的segment要显示相应的index
// if items.count > 0 {
// var arr:[Double] = []
// for index in 0..<items.count {
// let rect = self.tableView.rectForHeader(inSection: index)
// let y = rect.origin.y-k_Height_NavigationtBarAndStatuBar-self.topSegmentHeight
// arr.append(y)
// }
//
// for (index, offY) in arr.reversed().enumerated() {
// if index == arr.count-1 {
// self.topSegmentView.updateSelectIndex(arr.count-index-1)
// self.segmentView.updateSelectIndex(arr.count-index-1)
// break
//
// } else {
// if scrollView.contentOffset.y >= offY+2 {
// self.topSegmentView.updateSelectIndex(arr.count-index-1)
// self.segmentView.updateSelectIndex(arr.count-index-1)
// break
// }
// }
// }
// }
var find:Bool = false var find:Bool = false
if items.count > 0 { if items.count > 0 {
for index in 0..<items.count { for index in 0..<items.count {
...@@ -439,40 +442,34 @@ extension YHMyFileListViewController { ...@@ -439,40 +442,34 @@ extension YHMyFileListViewController {
@objc func clickSaveBtn() { @objc func clickSaveBtn() {
YHHUD.show(.progress(message: "正在生成图片")) YHHUD.show(.progress(message: "正在生成图片"))
self.tableView.snp.remakeConstraints { make in self.tableView.snp.remakeConstraints { make in
make.top.equalToSuperview() make.top.equalToSuperview()
make.left.right.equalToSuperview() make.left.right.equalToSuperview()
printLog("contentSize 000:\(self.tableView.contentSize.height)")
make.height.equalTo(self.tableView.contentSize.height) make.height.equalTo(self.tableView.contentSize.height)
} }
let originY = self.tableView.contentOffset.y let originY = self.tableView.contentOffset.y
TYSnapshotScroll.screenSnapshot(self.tableView) {
[weak self] image in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: { YHHUD.hide()
guard let self = self else { return }
TYSnapshotScroll.screenSnapshot(self.tableView) { self.tableView.setContentOffset(CGPoint(x: 0, y: originY), animated: false)
[weak self] image in self.tableView.snp.remakeConstraints { make in
YHHUD.hide() make.top.equalToSuperview()
guard let self = self else { return } make.left.right.equalToSuperview()
self.tableView.setContentOffset(CGPoint(x: 0, y: originY), animated: false) make.bottom.equalTo(self.bottomView.snp.top)
self.tableView.snp.remakeConstraints { make in }
make.top.equalToSuperview()
make.left.right.equalToSuperview() if let img = image {
make.bottom.equalTo(self.bottomView.snp.top) // 裁剪
} let targetFrame = CGRectMake(0, k_Height_NavigationtBarAndStatuBar-30, img.size.width, img.size.height-k_Height_NavigationtBarAndStatuBar)
let croppedImage = img.cropped(to: targetFrame)
self.saveImage(croppedImage)
if let img = image { } else {
// 裁剪 YHHUD.flash(message: "生成图片失败")
let targetFrame = CGRectMake(0, k_Height_NavigationtBarAndStatuBar-30, img.size.width, img.size.height-k_Height_NavigationtBarAndStatuBar)
let croppedImage = img.cropped(to: targetFrame)
self.saveImage(croppedImage)
} else {
YHHUD.flash(message: "生成图片失败")
}
} }
}) }
} }
func saveImage(_ image: UIImage) { func saveImage(_ image: UIImage) {
...@@ -513,7 +510,6 @@ extension YHMyFileListViewController { ...@@ -513,7 +510,6 @@ extension YHMyFileListViewController {
self.items.removeAll() self.items.removeAll()
self.titles.removeAll() self.titles.removeAll()
var isHaveData = false var isHaveData = false
self.tableView.isHidden = true
if success == true { if success == true {
for (_, item) in self.viewModel.arrFileListData.enumerated() { for (_, item) in self.viewModel.arrFileListData.enumerated() {
let arr = item?.supplement_list.filter { (item) -> Bool in let arr = item?.supplement_list.filter { (item) -> Bool in
...@@ -544,16 +540,15 @@ extension YHMyFileListViewController { ...@@ -544,16 +540,15 @@ extension YHMyFileListViewController {
self.segmentView.isHidden = self.items.count <= 1 self.segmentView.isHidden = self.items.count <= 1
self.headerView.height = self.items.count > 1 ? self.originHeaderHeight : self.originHeaderHeight-self.topSegmentHeight self.headerView.height = self.items.count > 1 ? self.originHeaderHeight : self.originHeaderHeight-self.topSegmentHeight
self.tableView.reloadData() self.tableView.reloadData()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: { self.fakeTableView.tableHeaderView?.height = self.headerView.height
if self.items.count > 0 { self.fakeTableView.reloadData {
let model = self.items[self.items.count-1] let lastSection = self.items.count-1
let lastRow = model.supplement_list.count > 0 ? model.supplement_list.count-1 : 0 if 0 <= lastSection && lastSection < self.items.count {
// 此处因为tableView.contentSize计算不准 let model = self.items[lastSection]
self.tableView.scrollToRow(at: IndexPath(row: lastRow, section: self.items.count-1), at: .top, animated: true) let lastRow = model.supplement_list.count-1
self.fakeTableView.scrollToRow(at: IndexPath(row: lastRow, section: lastSection), at: .top, animated: true)
} }
self.tableView.scrollToTop() }
self.tableView.isHidden = false
})
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment