Многоразовый UITableViewCell с UICollectionViewCell - PullRequest
0 голосов
/ 20 сентября 2018

Код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    registerCells()
    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifierForItem(at: indexPath.row), for: indexPath) as? HorizontalCollectionTableViewCell else {
        return UITableViewCell()
    }
    if cellViewModels.count > indexPath.row {
        let viewModel = cellViewModels[indexPath.row]
        cell.viewModel = viewModel
    }
    return cell
}

Передача viewModel в ячейку:

var viewModel: TitleAccessoryButtonCollectionViewModel? {
    didSet {
        guard let viewModel = viewModel else {
            return
        }
        titleLabel.text = viewModel.title
        if let buttonTitle = viewModel.accessoryButtonModel?.title {
            setAccessoryButtonTitle(buttonTitle)
        }else{
            accessoryButton.hideTitleLabel()
        }

        if let buttonImage = viewModel.accessoryButtonModel?.image {
            accessoryButton.buttonImageView.image = buttonImage
        }
        else {
            accessoryButton.hideImageView()
        }

        sectionContentImage.image = viewModel.sectionContentImage
        titleLabelLeadingConstraint.constant = viewModel.titleLabelLeadingSpacing
        accessoryButton.isHidden = viewModel.hideAccessoryButton
        sectionContentView.isHidden = viewModel.hidePremiumContentView
        let collectionViewModel = viewModel.collectionViewModel
        collectionViewHeight.constant = CGFloat(collectionViewModel.height)
        collectionViewModel.setup(collectionView: collectionView)
        collectionView.delegate = collectionViewModel.delegate
        collectionView.dataSource = collectionViewModel.dataSource
        collectionView.reloadData()

    }
}

Описание:

У меня есть шесть UITableViewCell в основном, и они могут использоваться многократно.

В каждом UITableViewCell есть UICollectionView.

Пять UICollectionView's используйте обычные UICollectionViewFlowLayout's, но нужен собственный подкласс.

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

Есть какой-нибудь хороший способ очистить этот макет или предотвратить эту ситуацию?

Может быть, что-то с prepareForReuse()?

Я добавляю это UICollectionViewэто розетка в UITableViewCell.

1 Ответ

0 голосов
/ 20 сентября 2018

Эта отличная статья очень помогла мне получить и запустить UICollectionViews в UITableviewCells: https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

Чтобы обновить макет, вы можете позвонить

collectionView.collectionViewLayout.invalidateLayout()

См. Также: Swift: Как обновить макет UICollectionView после поворота устройства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...