【发布时间】:2016-12-14 04:18:45
【问题描述】:
我有一个 CollectionView,它在运行时生成九个 collectionview 单元格(以编程方式设置)。
Storyboard 中只有一个 CollectionView Cell。
我有疑问如何将约束设置为 Cell 以使其如屏幕截图所示。
【问题讨论】:
标签: ios xcode storyboard uicollectionviewcell nslayoutconstraint
我有一个 CollectionView,它在运行时生成九个 collectionview 单元格(以编程方式设置)。
Storyboard 中只有一个 CollectionView Cell。
我有疑问如何将约束设置为 Cell 以使其如屏幕截图所示。
【问题讨论】:
标签: ios xcode storyboard uicollectionviewcell nslayoutconstraint
对于集合视图,您可以从情节提要设置线条和单元格之间的距离。 最初您需要设置行和单元格的最小间距。
然后您需要根据设备的宽度为单元格设置动态宽度, 并确保从该宽度中减去 2*minimum 间距。如果有左侧或右侧的部分,还减去部分插图。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
return CGSizeMake((Device_Width/3.0)-2*(Minimum cell spacing+section_insets.left), 120.0)
//for iphone 4 in my case
// return CGSizeMake((320/3.0)-(2*1)-2(10),100.0) }
设备宽度是设备的宽度。 您在情节提要中设置的最小单元格间距 section_inset.left 也符合情节提要的值。
【讨论】:
因为您的布局显示每行将有 3 个单元格。您需要将集合视图宽度除以 3 加上分隔符空间。一种好方法是使用自动布局将集合视图左上角底部附加。并使用以标签为中心的虚拟单元格。您需要以编程方式处理此委托。
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGFloat screenWidth = collectionViewFrame.size.width;
float cellWidth = screenWidth / 3.0 - 20; //Replace the divisor with the column count requirement. Make sure to have it in float.
CGSize size = CGSizeMake(cellWidth, cellWidth);
return size;
}
【讨论】: