首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置collectionView大小。(sizeForItemAtIndexPath功能不工作) Swift 3

设置collectionView大小。(sizeForItemAtIndexPath功能不工作) Swift 3
EN

Stack Overflow用户
提问于 2016-10-13 19:36:00
回答 4查看 59K关注 0票数 59

我有一个tableView,在每个tableViewCell中都有一个collectionView

我正在尝试使用以下代码更改collectionView大小:

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

    if collectionView.tag == 2{

        return CGSize(width: 100, height: 100)

    }else if collectionView.tag == 4 {


        return CGSize(width: 222, height: 200)

    }else{


        return CGSize(width: 10, height: 10)
    }

}

问题是没有错误,但像元大小不变

如果您需要了解更多信息,只需写评论即可。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-14 00:49:55

这就是我现在的代码,它是有效的:

        collectionView.delegate = dataSourceDelegate
        collectionView.dataSource = dataSourceDelegate
        collectionView.tag = row
        collectionView.setContentOffset(collectionView.contentOffset, animated:false)
        collectionView.reloadData()
        collectionView.register(UINib(nibName: "eventsCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "eventsCollectionViewCell")


        if row == 2{


            let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
            layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
            layout.itemSize = CGSize(width: 120, height: 120)
            layout.scrollDirection = .horizontal

            collectionView.collectionViewLayout = layout

        }else if row == 4 {


            let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
            layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
            layout.itemSize = CGSize(width: 222, height: 200)
            layout.scrollDirection = .horizontal

            collectionView.collectionViewLayout = layout

        }else{

            print("else")
        }
票数 3
EN

Stack Overflow用户

发布于 2016-10-13 19:48:39

在Swift 3中,此方法的签名已更改为:

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    // your code here
}

注意细微的区别:用(_ collectionView: ...代替(collectionView: ...

这是因为在Swift 3中,您必须显式指定第一个参数的标签。您可以通过添加下划线字符_来覆盖此默认行为。

此外,请确保您的类同时采用UICollectionViewDelegateUICollectionViewDelegateFlowLayout协议

class MyViewController: UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {

    // your code here

    func collectionView(_ collectionView: UICollectionView,
                layout collectionViewLayout: UICollectionViewLayout,
                sizeForItemAt indexPath: IndexPath) -> CGSize {
        // your code here
    }
}

请参阅this link了解更多关于Swift 3中的更改。

票数 61
EN

Stack Overflow用户

发布于 2017-01-31 01:33:14

您需要在类声明中指定实现协议UICollectionViewDelegateFlowLayout。

class PhrasesCompactCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40019875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档