Как отобразить конкретную ячейку UICollectionView, используя viewForSupplementaryElementOfKind - swift - PullRequest
0 голосов
/ 05 июля 2018

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

Вот как я создал раздел заголовка: (программно)

/// banner section
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerCellId, for: indexPath) as! HeaderBanner

    header.sectionCategory = dashbordCell?[indexPath.item]

    return header
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    let size = CGSize(width: view.frame.width, height: 370)
    return size
}

Вот я создал HeaderBanner

let dataBannerCollectionView: UICollectionView = {

    var scrollInterval: Int = 3
    let flowLayout = UICollectionViewFlowLayout()
    flowLayout.scrollDirection = .horizontal
    let collectionView = UICollectionView(frame: .zero,collectionViewLayout: flowLayout)
    collectionView.backgroundColor = UIColor.clear
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    return collectionView

}()

func setupViewsCell(){
    dataBannerCollectionView.showsHorizontalScrollIndicator = false


    dataBannerCollectionView.dataSource = self
    dataBannerCollectionView.delegate = self

    dataBannerCollectionView.register(HeaderBannerDataCell.self, forCellWithReuseIdentifier: headerCellId)

    addSubview(dataBannerCollectionView)
    setupConstraintDataBannerCollectionView()



}

Вот поведение файла HeaderBanner.

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    if let count = sectionCategory?.dataBanner?.count {

        return count
    }
    return 0
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: headerCellId, for: indexPath) as! HeaderBannerDataCell
    cell.dataBannerCell = sectionCategory?.dataBanner![indexPath.item]

    return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    print(frame.width)
    let size = CGSize(width: frame.width - 100 , height: 350)
    return size
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print("Banner selected")
}

Как видите, в заголовке раздела отображается первая ячейка изображения. Просто мое приложение выглядит так, когда пользователь открывает приложение.

Вот вывод моего примера приложения:

image

Вот мое ожидание, которое я хочу отобразить в средней ячейке всех ячеек.

image

1 Ответ

0 голосов
/ 10 июля 2018

Вы можете использовать функцию scrollToItem в UICollectionView:

если у вас есть три ячейки, например:

        dataBannerCollectionView.scrollToItem(at: IndexPath(item: 2, section: 0), at: UICollectionViewScrollPosition.centeredHorizontally, animated: false)

Добавьте этот код в функцию setupViewsCell ()

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