如何将 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
& label
或textView
等设置了约束?
【参考方案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
设置collectionView
itemSize
。试试下面的方法..
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 放在前面?