UIScrollViewDelegate 中的委托方法不响应 table 视图滚动事件

Delegate methods in UIScrollViewDelegate don't respond to table view scrolling event

我正在尝试拉动刷新和无限滚动到 table 视图而不需要外部库

我正确设置了委托:

tableView.delegate   = self

但是在 table 视图中滚动时,滚动方法不响应滚动操作,例如:

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)

经过大量搜索后,可能是 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
        }

    }

}