Swift tableview单元格中水平collectionview的滚动问题

Swift tableview单元格中水平collectionview的滚动问题,swift,uitableview,uicollectionview,Swift,Uitableview,Uicollectionview,我有一个带有自定义单元格的tableview每个单元格都有一个水平集合视图。因此,当重新加载tableView时,我正确地获取了tableView中的数据,因此第一个tableView单元格与collection视图配合良好,但其他单元格没有从一开始就具有滚动 我试图在tableView单元格中创建collectionview,它工作正常,但滚动条无法按我的需要工作 extension HomeVC:UITableViewDataSource,UITableViewDelegate {

我有一个带有自定义单元格的tableview每个单元格都有一个水平集合视图。因此,当重新加载tableView时,我正确地获取了tableView中的数据,因此第一个tableView单元格与collection视图配合良好,但其他单元格没有从一开始就具有滚动

我试图在tableView单元格中创建collectionview,它工作正常,但滚动条无法按我的需要工作

    extension HomeVC:UITableViewDataSource,UITableViewDelegate
{
    func numberOfSections(in tableView: UITableView) -> Int {

        return 1
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return (self.viewModel.homee?.data?.banners?.count ?? 0) + 1
    }



    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return HelpingMethods.setProductHeight() + 50
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueCellForTable(ofType: ProductSliderCell.self)

                cell.configureCell(banner.content, nil,0)
                return cell

    }
}
对于集合视图,我使用此代码

class ProductSliderCell: UITableViewCell {



override func awakeFromNib() {
    super.awakeFromNib()
    collectionView.registerNibForCollection(ofType: productItem.self)
}

@IBOutlet weak var collectionView: UICollectionView!
override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}
}


我没有得到我预期的结果,我认为这是因为单元格的重用通常发生在RTL方向的应用程序中,当单元格被重用时,它不会消除它在之前单元格中的位置

解决方案是每次加载单元格时,总是强制翻转UICollectionView,使用collectionView的flow layout属性
flipsHorizontallyInOppositeLayoutDirection
返回true

1) 创建具有以下属性的自定义流布局类:

class ArabicCollectionFlow: UICollectionViewFlowLayout {
    override func prepare() {
        super.prepare()
        self.scrollDirection = .horizontal
    }
    override var flipsHorizontallyInOppositeLayoutDirection: Bool {
        return true
    }
}
在Tableviewcell类中,在
awakeFromNib
中,为了确保加载了nib,忽略它被重用的事实,您将把collectionView流布局设置为我们上面创建的布局

override func awakeFromNib() {
    super.awakeFromNib()
    categories.collectionViewLayout = ArabicCollectionFlow()
}
请注意,必须在重新加载数据后设置此流布局


此外,如果您的应用程序正在RTL模式下运行,您可能只需要使用此解决方案,因此您可以在使用此自定义布局之前进行检查

您的预期行为是什么,以及它现在的行为如何?可能您需要为CollectionView明确指定它们仅水平滚动?在第一个单元格中,滚动从第一个项目开始,而在其他单元格中,滚动不从第一个项目开始。您所说的“滚动开始”是什么意思?你能用正确的单元格和错误的单元格添加屏幕截图吗?你是说利润吗?或者什么?让我进一步解释一下,如果我有10个tableview单元格,每个tableview单元格都有一个水平的collectionview,其中有10个项目。当我运行项目时,第一个tableview单元格从第一个项目开始collectionview,而其他collectionview没有从一开始就开始清除?那么您是说第一个单元格的contentOffsetcollectionView单元格为0,但下一个单元格的内容偏移量>0?如果是这种情况,请尝试将collectionView.contentOffset=0添加到numberOfItemsInsection方法中。
override func awakeFromNib() {
    super.awakeFromNib()
    categories.collectionViewLayout = ArabicCollectionFlow()
}