Функциональность приложения uber, на которую вы ссылаетесь, работает следующим образом: всякий раз, когда определенный раздел tableView
достигает вершины, выбирается конкретный collectionViewCell
.
Как видно из приведенного выше утверждения,
количество элементов в collectionView
= количество разделов в tableView
Вы можете решить эту конкретную проблему, отследив верхний видимый индекс секции tableView
, а затем выбрав collectionViewCell
по этому конкретному индексу, т.е.
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView === self.tableView {
if
let topSectionIndex = self.tableView.indexPathsForVisibleRows?.map({ $0.section }).sorted().first,
let selectedCollectionIndex = self.collectionView.indexPathsForSelectedItems?.first?.row,
selectedCollectionIndex != topSectionIndex {
let indexPath = IndexPath(item: topSectionIndex, section: 0)
self.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredHorizontally)
}
}
}
Изменение collectionViewCell
цвета на выбор:
Создайте пользовательское свойство UICollectionViewCell
и переопределите **isSelected**
для обработки выбранного и невыбранного состояния, т.е.
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var titleLabel: UILabel!
override var isSelected: Bool {
didSet {
if self.isSelected {
self.contentView.backgroundColor = #colorLiteral(red: 0.2588235438, green: 0.7568627596, blue: 0.9686274529, alpha: 1)
} else {
self.contentView.backgroundColor = #colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)
}
}
}
}
После этого вам не нужно будет вручную обновлять backgroundColor
ячейки в другом месте.