如何将 UICollectionViewCell 高度设置为视图(屏幕)高度的 90%?

Posted

技术标签:

【中文标题】如何将 UICollectionViewCell 高度设置为视图(屏幕)高度的 90%?【英文标题】:How to set UICollectionViewCell height to 90% of the View (Screen) height? 【发布时间】:2016-12-09 18:29:16 【问题描述】:

我正在尝试将 UICollectionViewCell 高度设置为屏幕尺寸的 90%。因此,当使用不同的设备时,单元格大小会看起来不错。

问题是我不确定如何以编程方式设置单元格高度。所有单元格应该看起来相同大小,所以不需要考虑内容,我只希望单元格高度为屏幕的 90%。

这是它在 iphone 6 屏幕上的样子:

但是,当切换到较小的设备时,它看起来像这样:

提前感谢您的帮助!

【问题讨论】:

你用的是流式布局吗? 您是否对imageView& labeltextView 等设置了约束? 【参考方案1】:

您可以通过编程方式设置UICollectionView 的流布局图块大小。有几个不同的地方可能会导致这种情况,我将从viewWillAppear(在您的 ViewController 类中)开始:

override func viewWillAppear() 
    super.viewWillAppear()
    if let layout = self.schedulesView.collectionViewLayout as? UICollectionViewFlowLayout 
        var cellSize = UIScreen.main.bounds.size // start with the full screen size
        cellSize.height *= 0.9 // adjust the height by 90%
        layout.itemSize = cellSize // set the layouts item size
    

【讨论】:

感谢您的回答。我试图实现它,但结果与我预期的不同。顶部的红色“加载”区域被拉出集合视图。高度也没有变化。 我可以用你的方法调整 collectionViewCell 的高度。但是,单元格内的项目不会相应地调整大小。我必须手动调整它们的大小吗? 这首先取决于您如何布置它们。如果您使用基于约束的布局,则不必这样做。如果您只是在屏幕上涂抹东西并设置明确的像素值,那么可以。然后是整个遗留的自动调整大小行为,但我不是这些行为的权威。我只是一直使用约束。 您好 Travis,感谢您的回复。我确实把东西拖进了牢房。但是,在单元格内部,有一个标签与单元格绑定了 4 个约束,我还将标签的宽度和高度设置为等于单元格的宽度和高度。此标签不会相应地调整大小。 你确定不是单元格太宽?在我给出的示例中,我名义上将单元格宽度设置为屏幕宽度。但这只是一个起点。尝试宽度(例如添加 'cellSize.width = 100'),看看是否有任何影响。【参考方案2】:

您可以根据device size使用collectionViewFlowLayout设置collectionViewitemSize。试试下面的方法..

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize 
   // All the values are changable according to your needs.
    let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.sectionInset = UIEdgeInsets(top: 25, left: 3, bottom: 3, right: 3)
    layout.minimumInteritemSpacing = 50
    layout.minimumLineSpacing = 50
    return CGSize(width: self.collectionView.frame.width - 50, height:self.collectionView.frame.height - 100)

注意:从上面的代码中,您将获得框类型collectionView itemSize,它根据设备大小覆盖视图。

【讨论】:

嗨,乔,感谢您的帮助。我试图实现你的方法。它确实增加了 collectionViewCell 的大小。但是,单元格内的所有项目都不会调整大小。如图所示,底部 textView 的高度不会增长。我已将 textView 的宽度和高度设置为一定比例的单元格。你有什么建议吗?【参考方案3】:

刚刚发现问题在于 UICollectionViewCell 中的内容没有更新它们的大小。

UICollectionViewCell 的子类只需要这样

override var bounds: CGRect 
    didSet 
      contentView.frame = bounds
    

【讨论】:

以上是关于如何将 UICollectionViewCell 高度设置为视图(屏幕)高度的 90%?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UICollectionViewCell 高度设置为视图(屏幕)高度的 90%?

如何将导航栏移到 UICollectionViewCell 之外?

如何将 UIView 约束为 UICollectionViewCell

如何将 UICollectionViewCell 放在前面?

如何将 UICollectionViewCell 嵌套在另一个中?

如何将 UITapGestureRecognizer 添加到 UICollectionViewCell 中的图像