Делегат scrollViewDidScroll вызывается автоматически

Я использую делегат scrollViewDidScroll в своем приложении.

Но много раз, даже если я не начинал прокручивать, этот делегат вызывается, что создает много проблем. Я слышал, что даже при установке contentSize для определенного вида прокрутки в это время также будет вызываться этот делегат, т.е. scrollViewDidScroll.

Каковы различные сценарии, в которых вызывается этот делегат. Что нужно делать, чтобы это контролировать?

Могу ли я установить какой-либо параметр, чтобы справиться с этим?


person Bharath    schedule 25.07.2012    source источник


Ответы (5)


Чтобы предотвратить автоматическое срабатывание 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;
} 
person Sev    schedule 05.01.2015

актуально

scrollViewDidScroll: вызывается каждый раз при изменении границ прокрутки. Это означает, что он вызывается во время прокрутки, а также при запуске. Вы можете попробовать scrollViewWillBeginDragging: вместо этого.

person Dima    schedule 25.07.2012

scrollViewDidScroll также вызывается при изменении ориентации. Я узнал об этом здесь. Это была проблема, с которой я столкнулся. И теперь моя проблема решена с помощью этого сообщения.

person Bharath    schedule 27.07.2012

Привет, ребята, это очень старый вопрос, однако, если вы хотите знать, был ли scrollDidScroll запущен вручную (через палец) или из-за другого события, такого как didSelect или setContentOffset, используйте свойство UIScrollView.isTracking.

person user1968991    schedule 06.12.2018

Установите UICollectionView, делегат UITableView здесь, в этом методе

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