与CollectionView相关的CollectionViewCell的自动布局大小

时间:2015-06-18 17:46:15

标签: ios xcode swift collectionview

我将CollectionViewCell放在CollectionView中。 CollectionView的大小通过自动布局设置,有时可以更改。

我想(以编程方式)在我的CollectionView上设置约束,以便CollectionViewCell的大小响应CollectionView的大小(假设Cell的宽度等于CollectionView-100的宽度和高度应该是平等的。)

如何在Cell和CollectionView之间声明约束?

何时,何地以及如何设置这些约束?当CollectionView的大小发生变化时,我是否必须在单元格上调用setNeedsLayout?

我搜索了这么长时间,我发现的一切都是根据其内容改变Cell的大小 - 这不是我想要做的。我得到的唯一提示是我可能必须继承CollectionViewLayout - 但我不确定。

感谢任何帮助!

3 个答案:

答案 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) 
}