我将CollectionViewCell放在CollectionView中。 CollectionView的大小通过自动布局设置,有时可以更改。
我想(以编程方式)在我的CollectionView上设置约束,以便CollectionViewCell的大小响应CollectionView的大小(假设Cell的宽度等于CollectionView-100的宽度和高度应该是平等的。)
如何在Cell和CollectionView之间声明约束?
何时,何地以及如何设置这些约束?当CollectionView的大小发生变化时,我是否必须在单元格上调用setNeedsLayout?
我搜索了这么长时间,我发现的一切都是根据其内容改变Cell的大小 - 这不是我想要做的。我得到的唯一提示是我可能必须继承CollectionViewLayout - 但我不确定。
感谢任何帮助!
答案 0 :(得分:4)
您无法通过使用约束来实现此目的,但您可以使用UICollectionViewDelegate sizeForItemAtIndexPath
方法轻松实现此目的。示例:
func collectionView(collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize{
return CGSizeMake(collectionView.frame.size.width / 2 ,collectionView.frame.size.height/ 2)
}
更改collectionView大小后,您需要做的就是调用其reloadData
方法
答案 1 :(得分:0)
我可以建议U 2方法如何做到这一点:
1)在你的UIViewController中尝试在collectionViewLayout
方法中设置viewDidLayoutSubviews
属性。我不确定当屏幕方向发生变化时它是否有效。
- (void)viewDidLayoutSubviews
{
UICollectionViewFlowLayout *flow = YOUR_COLLECTION_VIEW.collectionViewLayout;
float width = CGRectGetWidth(YOUR_COLLECTION_VIEW.frame)-100.f;
float height = CGRectGetHeight(YOUR_COLLECTION_VIEW.frame);
YOUR_COLLECTION_VIEW.collectionViewLayout = flow;
}
如果它没有给出必要的效果,我100%确定如果U继承collectionView并插入相同的代码但是在 - (void)layoutSubviews
答案 2 :(得分:0)
使用UICollectionViewDelegateFlowLayout
sizeForItemAt
方法设置单元格高度并获取集合视图高度。您可以根据整数设置像元大小,或者如果合适的话,可以乘以百分比。
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout, sizeForItemAt
indexPath: IndexPath) -> CGSize {
let heigh = collectionView.frame.height
let widthOfCell = collectionView.frame.width - 100 // OP request
return CGSize(width: width, height: height)
}