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设置为负值?

如何设置滚动视图委托? [关闭]

UIScrollViewDelegate 方法中的重复代码

如何限制 UIScrollViewDelegate 仅适用于 UIViewController 中的一个视图

iOS:CollectionView里面的ScrollView委托方法没有调用