创建 Trover 风格画廊 iOS Swift
Creating Trover Style Gallery iOS Swift
我正在尝试在我的 iOS swift 应用程序中创建一个画廊,它的风格类似于 Trover 所做的,所以基本上我想要一个图像数组,指定最大数量图像以适合一行,然后我想动态生成 UIImageViews
,其帧大小由代码确定,以创建下面的拼贴效果。我知道这可以在 android 中使用 recyclerView
完成,但是我不确定在 iOS 中最好的方法是什么,我知道我可以使用 TableView、CollectionView 或 StackView我不确定最简单的方法是什么...我过去使用 CollectionViews
的方式是 CollectionViewCell
有一个静态大小,因此我不确定如何使它们适应这个目的。
根据给出的图片推测,我们可以假设每4个项目,布局是一样的。所以我们可以使用 UICollectionView
并且我们 可能 (请参阅答案末尾的注释)只需在 [=24] 中使用以下代码覆盖 collectionView:layout:sizeForItemAtIndexPath:
=], 但逻辑是一样的 Swift:
CGFloat wholeWidthAvailable = collectionView.frame.size-interspace; //Since we only show 2 item per line, there is only 1 interspace
CGFloat height;
switch (indexPath.row%2)
{
case 0:
height = 100;
break;
case 1:
height = 200;
break;
default:
break;
}
CGFloat width;
switch (indexPath.row%4)
{
case 0:
width = wholeWidthAvailable*2./5.;
break;
case 1:
width = wholeWidthAvailable*3./5.;
break;
case 2:
width = wholeWidthAvailable*3./5.;
break;
case 3:
width = wholeWidthAvailable*2./5.;
break;
default:
break;
}
return CGSizeMake(width, height);
注:
代码没有测试(我写到这里,不知道能不能这样编译)
我明确地写了两个 switch case,但它显然可以在一个中使用,因为 modulo 2 和 modulo 4 可以是 "joined"。
我选择了 2/5 和 3/5 以适应宽度(但你可以清楚地设置你喜欢的比例)。
我正在尝试在我的 iOS swift 应用程序中创建一个画廊,它的风格类似于 Trover 所做的,所以基本上我想要一个图像数组,指定最大数量图像以适合一行,然后我想动态生成 UIImageViews
,其帧大小由代码确定,以创建下面的拼贴效果。我知道这可以在 android 中使用 recyclerView
完成,但是我不确定在 iOS 中最好的方法是什么,我知道我可以使用 TableView、CollectionView 或 StackView我不确定最简单的方法是什么...我过去使用 CollectionViews
的方式是 CollectionViewCell
有一个静态大小,因此我不确定如何使它们适应这个目的。
根据给出的图片推测,我们可以假设每4个项目,布局是一样的。所以我们可以使用 UICollectionView
并且我们 可能 (请参阅答案末尾的注释)只需在 [=24] 中使用以下代码覆盖 collectionView:layout:sizeForItemAtIndexPath:
=], 但逻辑是一样的 Swift:
CGFloat wholeWidthAvailable = collectionView.frame.size-interspace; //Since we only show 2 item per line, there is only 1 interspace
CGFloat height;
switch (indexPath.row%2)
{
case 0:
height = 100;
break;
case 1:
height = 200;
break;
default:
break;
}
CGFloat width;
switch (indexPath.row%4)
{
case 0:
width = wholeWidthAvailable*2./5.;
break;
case 1:
width = wholeWidthAvailable*3./5.;
break;
case 2:
width = wholeWidthAvailable*3./5.;
break;
case 3:
width = wholeWidthAvailable*2./5.;
break;
default:
break;
}
return CGSizeMake(width, height);
注:
代码没有测试(我写到这里,不知道能不能这样编译)
我明确地写了两个 switch case,但它显然可以在一个中使用,因为 modulo 2 和 modulo 4 可以是 "joined"。
我选择了 2/5 和 3/5 以适应宽度(但你可以清楚地设置你喜欢的比例)。