UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件
Posted
技术标签:
【中文标题】UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件【英文标题】:Delegate methods in UIScrollViewDelegate don't respond to table view scrolling event 【发布时间】:2019-04-18 15:51:14 【问题描述】:我正在尝试在不需要外部库的情况下进行拉动以刷新和无限滚动到表格视图
我正确设置了委托:
tableView.delegate = self
但是当在tableview中滚动时,滚动方法不响应滚动动作例如:
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
if scrollView == self.tableView
let currentOffset: Float = Float(scrollView.contentOffset.y)
if currentOffset < 25
//refresh content
let offsetY = tableView.contentOffset.y
let contentHeight = tableView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height + 25
// load more
这种情况发生在我将方案构建配置更改为“发布”时,但当返回“调试”时它工作正常。
我的部署目标是:11.0,和 XCode 版本 10.2 (10E125)
【问题讨论】:
无限滚动可以查看github.com/ratulSharker/TableviewPaginator 在发布版本中可以省略空方法,断点可能不起作用。如果您实际上将代码添加到方法中,问题是否会重现? 是的,方法包含的实际代码不为空。 【参考方案1】:经过大量搜索,可能是 Swift 5 编译器问题(我发现那里报告了类似的错误):
解决方法是在每个方法中添加@objc:
@objc func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>)
if scrollView == self.tableView
let currentOffset: Float = Float(scrollView.contentOffset.y)
if currentOffset < 25
//refresh content
let offsetY = tableView.contentOffset.y
let contentHeight = tableView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height + 25
// load more
【讨论】:
以上是关于UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件的主要内容,如果未能解决你的问题,请参考以下文章
为同一类中的 2 个不同 UIScrollView 设置委托
在uiscrollviewdelegate中,是否可以将targetContentOffset设置为负值?