Swift 在 table 个视图单元格之间滑动?
Swift swipe between table view cells?
目前,我有一个 tableView
,其中每个单元格占据整个安全区域,因此整个 phone 屏幕将被该单元格填充。但是,不是在单元格之间滚动,而是如何让用户可以在单元格之间滑动 Up/Down(没有滚动,只是在 table 视图单元格之间上下滑动,这样一个单元格就会来自底部并完全替换屏幕上的单元格)
我正在使用 dequeable 单元格 - 我已经尝试关闭滚动并使用 cellWillload,但是,我没有得到在单元格之间上下滑动的预期结果。
在您的 table 视图的委托(可能是您的视图控制器)中,覆盖 scrollViewWillEndDragging:withVelocity:targetContentOffset:
以设置 targetContentOffset
因此只有一个单元格可见。
示例:
class ViewController: UITableViewController {
override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let targetRect = CGRect(origin: targetContentOffset.pointee, size: tableView.bounds.size)
let indexPaths = tableView.indexPathsForRows(in: targetRect) ?? []
let target: Int
switch (indexPaths.count, velocity.y.sign) {
case (0, _): return
case (1, _): target = 0
case (_, .plus): target = 1
case (_, .minus): target = 0
}
targetContentOffset.pointee.y = tableView.rectForRow(at: indexPaths[target]).origin.y - tableView.adjustedContentInset.top
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let desiredRowHeight = tableView.frame.size.height - tableView.adjustedContentInset.top - tableView.adjustedContentInset.bottom
if tableView.rowHeight != desiredRowHeight {
tableView.rowHeight = desiredRowHeight
tableView.beginUpdates()
tableView.endUpdates()
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell
cell.indexPath = indexPath
return cell
}
}
结果:
目前,我有一个 tableView
,其中每个单元格占据整个安全区域,因此整个 phone 屏幕将被该单元格填充。但是,不是在单元格之间滚动,而是如何让用户可以在单元格之间滑动 Up/Down(没有滚动,只是在 table 视图单元格之间上下滑动,这样一个单元格就会来自底部并完全替换屏幕上的单元格)
我正在使用 dequeable 单元格 - 我已经尝试关闭滚动并使用 cellWillload,但是,我没有得到在单元格之间上下滑动的预期结果。
在您的 table 视图的委托(可能是您的视图控制器)中,覆盖 scrollViewWillEndDragging:withVelocity:targetContentOffset:
以设置 targetContentOffset
因此只有一个单元格可见。
示例:
class ViewController: UITableViewController {
override func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
let targetRect = CGRect(origin: targetContentOffset.pointee, size: tableView.bounds.size)
let indexPaths = tableView.indexPathsForRows(in: targetRect) ?? []
let target: Int
switch (indexPaths.count, velocity.y.sign) {
case (0, _): return
case (1, _): target = 0
case (_, .plus): target = 1
case (_, .minus): target = 0
}
targetContentOffset.pointee.y = tableView.rectForRow(at: indexPaths[target]).origin.y - tableView.adjustedContentInset.top
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let desiredRowHeight = tableView.frame.size.height - tableView.adjustedContentInset.top - tableView.adjustedContentInset.bottom
if tableView.rowHeight != desiredRowHeight {
tableView.rowHeight = desiredRowHeight
tableView.beginUpdates()
tableView.endUpdates()
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 20 }
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell
cell.indexPath = indexPath
return cell
}
}
结果: