创建 Trover 样式库 iOS Swift

Posted

技术标签:

【中文标题】创建 Trover 样式库 iOS Swift【英文标题】:Creating Trover Style Gallery iOS Swift 【发布时间】:2016-06-09 11:57:25 【问题描述】:

我正在尝试在我的 ios swift 应用程序中创建一个画廊,其风格类似于 Trover 所做的那样,所以基本上我想要一组图像,指定最大数量的图像以适合一行,然后我想要动态生成UIImageViews,其帧大小由代码确定,以创建下面的拼贴效果。我知道这可以在 android 中使用recyclerView 完成,但是我不确定在 iOS 中最好的方法是什么,我知道我可以使用 TableView、CollectionView 或 StackView 但是我不确定最简单的方法是什么这将是......我过去使用CollectionViews 的方式是它们具有CollectionViewCell 的静态大小,因此我不确定如何使它们适应这个目的。

【问题讨论】:

借助 UICollectionView,您可以使用自定义布局。从您的屏幕截图(我不使用该应用程序,简单推测)看来,只有 2 种线条,因此您甚至可能不必创建整个自定义布局。只需给出项目的大小,根据它的索引行(这里,我会说每4个单元格,它的大小相同),就足够了。 您是否建议让我们说一组照片是一个UICollectionViewCell 并且根据我想要的布局,我在该单元格内动态创建图像视图?例如,一个单元格可以有 2 个ImageViews 或 4 个ImageViews 等,我只是随机选择我想要的设计? 我为 UICollectionView 添加了一个示例代码(在 Objective-C 中,但逻辑应该是相同的,没有什么真正复杂的,除了可能是“模数”,但其余的看起来很像 Swift。 【参考方案1】:

从给出的图像推测,我们可以假设每4个项目,布局是相同的。所以我们可以使用UICollectionView,我们可以(见答案末尾的注释)只需要在Objective-C中用下面的代码覆盖collectionView:layout:sizeForItemAtIndexPath:,但逻辑是一样的在斯威夫特:

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,但它显然可以合二为一,因为模 2 和模 4 可以“连接”。 我选择了 2/5 和 3/5 来适应宽度(但你可以清楚地放出你喜欢的比例)。

【讨论】:

如果我想让它变得更复杂,例如有 4 种可能的布局,一个有 2 个图像视图,3、4 和 5 并在它们之间随机更改,在 collectionViewCell 中执行此操作会更容易吗类或在您上面建议的 collectionView 委托方法中

以上是关于创建 Trover 样式库 iOS Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 创建底部表单样式模型视图控制器?

iOS 13 UIToolBar 样式

状态栏样式不会因单个视图而改变 - Swift 2/iOS9

swift ios 以编程方式设置 PageViewController 的过渡样式和方向

ios swift:是不是可以更改字符串中某个单词的字体样式?

创建类、结构或新的 swift 文件以创建具有特定样式的可重用文本框?