CollectionView внутри TableView scrollViewDidEndDecelerating аварии - PullRequest
0 голосов
/ 29 января 2019

In UITableView (горизонтальная прокрутка) numberOfRowsInSection - это динамическое число.В UICollectionView (вертикальная прокрутка) numberOfItemsInSection также является динамическим.

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return (self.arrayNewsfeedsList[intIndex]as! Newsfeeds).media!.count//3
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "sliderCollectionViewCell", for: indexPath) as! sliderCollectionViewCell
    let stringImageUrl = "https://img.youtube.com/vi/CQElIZzzlpc/hqdefault.jpg"
    cell.imageViewSlider.setKRImageUrl(url:stringImageUrl) { (imageUser) in
        cell.imageViewSlider.image = imageUser
    }       
    return cell
}

При прокрутке scrollViewDidEndDecelerating и scrollViewDidEndScrollingAnimation приложение выходит из строя.

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let cell = tableviewNewsfeed.cellForRow(at: NSIndexPath(row: 0, section: intIndex) as IndexPath)as! NewsfeedTableViewCell
    cell.pagecontrolYoutube?.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width - 50)
}

func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
    let cell = tableviewNewsfeed?.cellForRow(at: NSIndexPath(row: 0 , section: intIndex) as IndexPath)as! NewsfeedTableViewCell
    cell.pagecontrolYoutube?.currentPage = Int(scrollView.contentOffset.x) / Int(scrollView.frame.width - 50)
} 

Как мнеобновить эту строку?

tableviewNewsfeed?.cellForRow(at: NSIndexPath(row: 0 , section: intIndex) as IndexPath)as! NewsfeedTableViewCell

См. это изображение для справки: https://imgur.com/a/oG4nLtc

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Похоже, что ваше табличное представление не отображает первую ячейку в то время.Так что, если он не виден, то вы всегда получаете ноль для строки 0.

Получить текущую видимую строку в это время.Тогда вы получите объект ячейки.

tableviewNewsfeed?.cellForRow(at: NSIndexPath(row: currentVisibleRow , section: intIndex) as IndexPath)as! NewsfeedTableViewCell
0 голосов
/ 29 января 2019

Прежде всего, я бы посоветовал избегать залипания UITableView внутри UICollectionView - это всегда плохая идея с повторным использованием ячеек, и это просто испортит что-то где-нибудь в будущем.Попробуйте поработать с IGListKit - это помогает легко управлять вложенными структурами данных, посмотрите их примеры.

Что касается вашего кода - способ выполнения вложенных настроек - это иметь один UICollecionViewCell для хранения всего UITableView и не пытаться подсчитать количество ячеек таблицы и передать это число в метод делегата UICollectionView.Итак - верните только 1 ячейку для раздела представления коллекции:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 1
}

И затем полностью управляйте настройкой UITableView в UICollectionViewCell подклассе

...