约束不适用于 UICollectionView

Posted

技术标签:

【中文标题】约束不适用于 UICollectionView【英文标题】:Constraints don't work on UICollectionView 【发布时间】:2018-12-08 11:01:29 【问题描述】:

在我的应用程序中,有三个“UICollectionViews”。如果我为它们设置constraints,它们会产生一些奇怪的东西......'UICollectionViews'会融合在一起,只显示其中一个,并且UICollectionViewCells 在屏幕变大时不会被拉伸(iPad / iPhone +)。

在“UICollectionViews”上使用约束时有什么特别需要考虑的吗?

这是一张图片,可以更清楚地说明我的意思:

【问题讨论】:

集合视图的尾随和前导约束相等的项目是什么? 我还没有设置任何约束,因为我所做的没有奏效。我希望左侧 CV 中有 48 个项目,另外两个中有 12 个项目 这看起来像是你一个月前的问题——但你没有跟进? ***.com/questions/53297580/… 我尝试了所有方法,但由于我是一名新编码员,我不知道我是否以正确的方式做到了 @SWIFTstuff - 你展示这个的方式,在每个集合视图上设置适当的宽度约束。如果那不这样做,你需要更清楚你想要做什么。显示您希望它在 iPhone iPad 上的外观...以及您希望它在横向方向中的外观(如果不同)。 【参考方案1】:

看起来像单元格大小和视图大小不匹配,因为您没有提到单元格。

在这种情况下,做一个Collection View Flow Layout的出口并相应地调整单元格大小。

@IBOutlet weak var collView: UICollectionView!
@IBOutlet weak var collLayout: UICollectionViewFlowLayout!

override func viewDidLayoutSubviews() 
    var w = self.view.frame.width
    if #available(ios 11.0, *) 
        w = self.view.safeAreaLayoutGuide.layoutFrame.width
    
    let padding:CGFloat = 20
    let spacing:CGFloat = 5
    let columns:CGFloat = 6
    let cw = ceil((w - padding) / columns)
    collLayout.itemSize = CGSize(width: cw - spacing*2, height: cw - spacing*2)
    collLayout.minimumLineSpacing = spacing
    collLayout.minimumInteritemSpacing = spacing

    super.viewDidLayoutSubviews()

【讨论】:

我将此部分添加到我的代码中并收到此错误:2018-12-11 15:25:55.156018+0100 MastermindProjekt[8501:144983] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[UICollectionView setItemSize:]:无法识别的选择器发送到实例 0x7faf8e84c400' 如何连接 UICollectionViewFlowLayout?

以上是关于约束不适用于 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

约束排除不适用于分区表

superview 的底部约束不适用于 3.5 布局

约束不适用于视图和自定义 xib 文件

在 xib 文件上设置的约束不适用于 ipad ios

在 Swift 中显示 UITextField 的底部边框不适用于约束。

Typescript 索引属性约束检查适用于原始类型但不适用于对象文字?