首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollectionView不服从UICollectionViewDelegateFlowLayout和insets

UICollectionView不服从UICollectionViewDelegateFlowLayout和insets
EN

Stack Overflow用户
提问于 2017-12-13 01:03:40
回答 1查看 691关注 0票数 3

所以我有一个CollectionView,它有以下代码:

代码语言:javascript
复制
class MyViewController: UIViewController {
    ...
    @IBOutlet weak var imageCollectionView: UICollectionView!
    fileprivate let sectionInsets = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
    fileprivate let itemsPerRow: CGFloat = 3
    ...

    override func viewDidLoad() {
        super.viewDidLoad()
        imageCollectionView.delegate = self
        imageCollectionView.dataSource = self
   }
}

...

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

        let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
        let availableWidth = collectionView.bounds.width - paddingSpace
        let widthPerItem = availableWidth / itemsPerRow

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

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

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return sectionInsets.left
    }
}

我想要的是每行有3个单元格,两者之间的空间很小,但是每当我运行这个应用程序时,我都会得到这样的结果:

每个黑块都是一个单元。

对于我发现的类似问题,答案通常是实现我所做的UICollectionViewDelegateFlowLayout函数,我的函数正在被调用,但并不像预期的那样工作!即使我手动将widthPerItem值更改为稍微小一些,它仍然不能工作!

有人能看到我是不是漏掉了一些显而易见的东西吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 02:09:08

您是否确保最小项间距设置为1点?您可以在Interface中设置它,也可以重写以下委托方法:

代码语言:javascript
复制
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0;
}

我看到的另一个可能的原因是,availableWidth除以itemsPerRow的结果是一个浮点数。最后,单元格宽度和内嵌的总和,实际上可能通过0.x像素超过集合视图的宽度。为了确保这种情况不会发生,您可能需要使用floor

代码语言:javascript
复制
func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
    let availableWidth = collectionView.bounds.width - paddingSpace
    let widthPerItem = floor(availableWidth / itemsPerRow)

    return CGSize(width: widthPerItem, height: widthPerItem)
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47784015

复制
相关文章

相似问题

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