我想在所有 iphone 型号的 uicollectionview 中的一行中显示两个单元格

Posted

技术标签:

【中文标题】我想在所有 iphone 型号的 uicollectionview 中的一行中显示两个单元格【英文标题】:i want to show two cell in one row in uicollectionview in all iphone model 【发布时间】:2017-08-28 06:01:34 【问题描述】:

here is some snap of it 我尝试使用此代码,但它不起作用:

我的收藏夹:

尺寸为:166:32 最小间距 : 10 : 10

部分插图:20 : 20

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt
        indexPath: IndexPath) -> CGSize
    
        if collectionView == MainCollectionView
        
            let padding : CGFloat =  50
            let collectionViewSize = MainCollectionView.frame.size.width - padding

            return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)

        
        return CGSize(width: 0, height: 0)
    

【问题讨论】:

您可以在一个部分中使用两个单元格。 【参考方案1】:

在您的视图中使用 UICollectionViewDelegateFlowLayout 并调用委托方法

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    let width = self.view.frame.width
    return CGSize(width: (width)/2, height: (width)/2) // width & height are the same to make a square cell

【讨论】:

你自己设置收集委托了吗【参考方案2】:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

    let width = (collectionView.frame.width/2)-0.5
    return CGSize(width:width , height: width)


【讨论】:

滚动的方向 滚动方向是垂直的【参考方案3】:

尝试实现这些UICollectionViewDelegateFlowLayout delegate methods 以达到预期的结果:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

    return CGSize(width: (collectionView.bounds.width - 10 - 20*2)/2, height: collectionView.bounds.height)
    //In collectionView.bounds.width - 10 - 20*2 :
    //10 for cell spacing and 
    //20*2 for section insets on left and right


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat

    return 10


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets

    return UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)

更清楚地指定您的要求,以便我可以进一步帮助您。

【讨论】:

什么不起作用?显示您获得的输出以及您想要实现的目标。 我想在 uicolectionview 中将两个单元格排成一行。 您使用的是水平还是垂直的集合视图? 如果可以,请添加屏幕截图以便更好地理解。【参考方案4】:

您的代码很完美,但您使用的委托方法可能没有被调用。根据您使用的 swift 语法版本,尝试最新的委托方法。还要确保你的集合视图是该委托的观察者,方法是让它自己。

【讨论】:

我只有 5s 和 bellow it 电话有问题。根据我的说法,我正在使用更新的语法,如果您有任何建议,请帮助我。 问题是特定于设备还是特定于 ios 版本?

以上是关于我想在所有 iphone 型号的 uicollectionview 中的一行中显示两个单元格的主要内容,如果未能解决你的问题,请参考以下文章

为 uicollectionView 单元格设置比例大小?

如何使用 reactjs 在 webapps 上获取特定的移动设备型号?

有没有办法删除所有 iPhone 应用程序数据?

如何为一个应用显示不同的名称?我想在 Iphone 和 App 中显示应用程序的名称

思路清奇:通过 JavaScript 获取移动设备的型号

苹果手机型号对应表