UICollectionView 和 AutoLayout

3

我正在尝试创建一个使用AutoLayout(使用SnapKit)定义其宽度、高度和坐标的UICollectionView。当使用默认UICollectionView构造函数时,会出现以下错误:

reason: 'UICollectionView必须用非空布局参数初始化'

唯一允许传递布局的构造函数还需要一个frame,因此我尝试将CGRectZero作为frame的值,如下所示:

collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)

接下来,我使用 SnapKit 来设置约束:

collectionView?.snp_makeConstraints { make -> Void in
        make.width.equalTo(view)
        make.height.equalTo(300)
        make.top.equalTo(someOtherView)
    }

然而,这样做时,UICollectionView 永远不会被呈现。事实上,我根本看不到数据源被调用。
有任何关于如何在 UICollectionView 中使用自动布局或者我可能做错了什么的想法吗?

你是否使用"addSubView"将集合视图添加到视图层次结构中? - Darko
你已经有了高度并给出了它的顶部位置,你也有宽度,但是左侧或右侧的位置在哪里呢?这可能会解决问题 :) - Sandeep
@Darko 是的,它已经被添加到层次结构中了。 - Steve
@GeneratorOfOne 感谢您的帮助,但是不幸的是它并没有奏效。非常奇怪。我觉得因为框架被设置为CGRectZero,它假定没有绘制单元格的意义。 - Steve
CGRectZero在这里并不重要,因为您正在使用自动布局,尺寸调整将由自动布局完成。那么您的collectionViewLayout呢?您是继承UICollectionViewLayout还是UICollectionViewFlowLayout?您是否自己管理collectionViewSize? - Sandeep
显示剩余3条评论
1个回答

7

以下代码对我来说完全正常,我得到了一个红色和空的集合视图。

Xcode 7 beta 4 - Swift 2.0 - iOS 9中的自动布局语法

override func viewDidLoad() {

    super.viewDidLoad()

    let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: UICollectionViewLayout())
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    collectionView.backgroundColor = UIColor.redColor()

    self.view.addSubview(collectionView)

    collectionView.widthAnchor.constraintEqualToAnchor(self.view.widthAnchor).active = true
    collectionView.heightAnchor.constraintEqualToConstant(300).active = true
    collectionView.topAnchor.constraintEqualToAnchor(self.view.topAnchor).active = true
}

我从未使用过SnapKit,但我知道它。在我的代码中提供的语法与您的示例几乎相同。因此,这只是一个线索,表明SnapKit或您如何使用它存在问题。

希望这能在某种程度上对您有所帮助。


2
唉...我之前设置了约束,但是集合视图实际上为空。SnapKit没有提醒我或引发异常。当我尝试了你的代码后,异常被抛出,我成功修复了顺序问题。谢谢! - Steve
我知道,有人在没有评论的情况下将所有内容都点了踩。 - DevAndArtist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接