Перемещение вида в зависимости от содержимого UICollectionView офсайд swift - PullRequest
1 голос
/ 07 февраля 2020

Здравствуйте: я пытаюсь создать collectionView со страницами с верхним сегментным элементом управления, который изменяет свой индекс в зависимости от текущей страницы collectionView

Вот код, который я использую для изменения селектора:

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.x
    self.selectorView.frame = CGRect(x: offset/3, y: 0, width: self.view.frame.width/3, height: 2)
}

Однако это вообще не перемещается selectorView, поэтому я попытался переместить процесс в фоновый поток:

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.x
    DispatchQueue.main.async {
        self.selectorView.frame = CGRect(x: offset/3, y: 0, width: self.view.frame.width/3, height: 2)
    }
}

Это работает, но вот глючный результат: запись экрана на YouTube

Кто-нибудь знает, как я могу это исправить?

1 Ответ

1 голос
/ 08 февраля 2020

Я бы установил segmentedControl selectedSegmentIndex на основе текущего индекса страницы. Вот предыдущая топи c о том, как вы можете рассчитать индекс: Нажмите

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

...