scrollViewDidScroll 代理正在自动调用

问题描述 投票:0回答:6

我在我的应用程序中使用scrollViewDidScroll委托。

但是,很多时候,即使我没有开始滚动,这个委托也会被调用,这会产生很多问题。我听说即使设置了特定滚动视图的 contentSize,此时也会调用该委托,即

scrollViewDidScroll

调用该委托的不同场景有哪些?控制这个的步骤是什么?

我可以设置任何参数来处理这个问题吗?

iphone ios xcode uiscrollview uiscrollviewdelegate
6个回答
10
投票

为了防止

scrollDidScroll:
在加载和调整视图时自动触发,我等待添加我的
UIScrollView
delegate
,直到使用
viewDidLayoutSubviews
加载所有视图之后。它对我来说效果很好。

- (void)viewDidLayoutSubviews {
    // add table view delegate after the views have been laid out to prevent scrollViewDidScroll
    // from firing automaticly when the view is adjusted on load, which makes the tab bar disappear 
    self.tableView.delegate = self;
} 

5
投票

相关

scrollViewDidScroll:每次滚动边界发生变化时都会被调用。 这意味着它会在滚动期间以及滚动时被调用 开始。您可能想尝试使用scrollViewWillBeginDragging: 代替。


5
投票
当方向改变时,

scrollViewDidScroll也会被调用。这是我从这里知道的。这就是我面临的问题。现在我的问题通过this帖子解决了。


4
投票

如果您想知道

scrollDidScroll
是手动触发的(通过手指手势)还是由于其他事件(如
didSelect
setContentOffset
)触发,请使用
UIScrollView.isTracking
UIScrollView.isDecelerating
属性。

使用示例:

if scrollView.isTracking || scrollView.isDecelerating {
    scrollPosition = collectionView.contentOffset
}

1
投票

在此方法中设置UICollectionView、UITableView委托

override func viewDidLayoutSubviews() {
     super.viewDidLayoutSubviews()
     // This method is called only after all subviews are laid
}

0
投票

此外,如果您只需要为“用户拖动滚动”调用它,您可以使用此:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard scrollView.isDragging else {
    return // Ignore programmatic scroll or layout updates
}

// Handle user-driven scrolling here

}

© www.soinside.com 2019 - 2024. All rights reserved.