场景1:我在视图的底部有一个UITableView
,没有标题,并且第一个单元格完整显示,并且UITableView
滚动被禁用。我需要将UITableView
平移(向上滑动)到视图顶部并扩展高度,当UITableView
到达视图顶部时,表格的标题应与动画一起显示,并滚动显示被启用。
场景2:UITableView
需要平移(向下滑动)到其初始状态,并且不能滚动,并且没有标题,因为它处于起始位置。仅当第一个单元格位于UITableView
的顶部时,才发生刷卡操作。
方案1解决的解决方案:我已将UIPanGestureRecognizer
添加到UITabeView
,并将UITableView平移(滑动)到视图顶部。之后,我启用了table scrolling
并重新加载了表格数据。在部分标题的高度中,只有在启用滚动功能的情况下,我才返回标题高度。
方案2的已尝试解决方案:在表到达顶部之后,我从UIPanGestureRecognizer
中删除了UITableView
并将其添加到表的标题中。当我拖动时,标题视图表会下降到其初始位置,并且滚动被禁用。但是我需要的是,仅当第一个单元格位于UITableView
的顶部时,滚动才应该在UITableView
本身中进行。
@IBOutlet public var headerView !
@IBOutlet public var tableView !
var intialTableFrame : CGRect!
// setting panGesture for table
override func viewDidLoad() {
panGesture = UIPanGestureRecognizer(target: self,
action: #selector("handlePanGesture:"))
tableView.addGestureRecognizer(panGesture )
tableView.isScrollEnabled = false
}
// panGesture
@objc func handlePanGesture(sender: UIPanGestureRecognizer) {
let translation = sender.translation(in: self.tableView)
// let velocity = sender.velocity(in: self.tableView)
let oldFrame = self.tableView.frame
if sender.state == UIGestureRecognizer.State.changed {
self.tableView.frame.origin.y = oldFrame.origin.y + translation.y
self.tableView.frame.size.height = oldFrame.size.height - translation.y
sender.setTranslation(CGPointZero, inView: self.tableView)
}
else if sender.state == UIGestureRecognizer.State.ended {
if self.tableView.frame.origin.y < self.view.center.y {
UIView.animate(withDuration:0.3, animations: { () -> Void in
self.tableView.frame.origin.y = 0
self.tableView.frame.size.height = self.view.frame.size.height
})
self.tableView.isScrollEnabled = true
self.tableView.reloadData() // This will add headerView to the table
self.tableView.removeGestureRecognizer(panGesture)
self.headerView.addGestureRecognizer(panGesture )
}
else {
UIView.animate(withDuration:0.3, animations: { () -> Void in
self.tableView.frame = self.intialTableFrame
})
self.tableView.isScrollEnabled = false
self.tableView.reloadData() // This will remove headerView to the table
self.headerView.removeGestureRecognizer(panGesture)
self.tableView.addGestureRecognizer(panGesture )
}
}
}
Expected Results : When i swipe the UITableView from top to bottom, the table should panned down only if the 1st cell is at the top of the UITableView. Otherwise the table should scroll as normal with the same position