如何使用 viewForSupplementaryElementOfKind 显示 UICollectionView 的特定单元格 - swift

Posted

技术标签:

【中文标题】如何使用 viewForSupplementaryElementOfKind 显示 UICollectionView 的特定单元格 - swift【英文标题】:How to display specific cell of UICollectionView using viewForSupplementaryElementOfKind - swift 【发布时间】:2018-07-05 08:01:01 【问题描述】:

我是一个新的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")

如您所见,标题部分显示图像的第一个单元格。当用户打开应用程序时,我只是我的应用程序看起来像这样。

这是我的示例应用程序的输出:

这是我的期望,我想显示所有单元格的中间单元格。

【问题讨论】:

没有问题请在截图上通知 @PravinTate 我只想在用户打开应用程序时,将单元格滚动到所有单元格的中间。 “标题部分” 【参考方案1】:

可以使用 UICollectionView 的 scrollToItem 功能:

例如,如果您有三个单元格:

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

在 setupViewsCell() 函数中添加该代码

【讨论】:

以上是关于如何使用 viewForSupplementaryElementOfKind 显示 UICollectionView 的特定单元格 - swift的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?