我已将单元格的宽度(UICollectionViewCell)设置为等于UICollectionView的宽度,并且我尝试使用该单元格中包含的UILabel执行完全相同的操作。我认为下面的代码完全解释了我想要实现的目标。所以我在这里阅读了一些问题以及一些教程,但我仍然不确定如何实现这一目标。
有几个问题是关于使用collectionViewLayout
的问题,但我真的在如何在我的代码中使用它时苦苦挣扎。有任何想法吗?谢谢!
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello there!"
// Set cell & label width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth // Works
cell.locationLabel.frame.size.width = collectionViewWidth // Does NOT
所以我添加了以下内容:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
return CGSize(width: collectionViewWidth, height: 35)
}
当加载视图时,UILabel的宽度仍然很小。如果我转到另一个视图然后返回,那么它是100%。所以我必须在viewDidLoad()
右边做点什么?我已经在使用self.collectionView.reloadData()
,但我想这只是用于数据。
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCellWithReuseIdentifier("locationCell", forIndexPath: indexPath) as LocationViewCell
cell.locationLabel.text = "Hello UILabel"
// Set cell width to 100%
let collectionViewWidth = self.collectionView.bounds.size.width
cell.frame.size.width = collectionViewWidth
cell.locationLabel.frame.size.width = collectionViewWidth
return cell
}
答案 0 :(得分:19)
它不起作用,因为在调用此方法时,集合视图已经知道单元格应该有多大,因为它已从流委托方法获取它:
optional func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
这是您应该设置单元格大小的位置。