Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义UICollection视图布局_Ios_Swift_Uicollectionview - Fatal编程技术网

Ios 自定义UICollection视图布局

Ios 自定义UICollection视图布局,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我正在尝试将集合视图配置为在所附图像中显示以下自定义布局: . 本质上,我希望能够配置我的集合视图,使其看起来基于行而不是列。例如: 第1行:3个大小相等的正方形,每个正方形为屏幕宽度的1/3 第2行:1个正方形,即屏幕宽度的2/3,然后堆叠2个正方形 每个屏幕的宽度各为屏幕宽度的1/3 第3行:填充屏幕宽度的1个矩形 第4行:2个大小相等的正方形,每个正方形为屏幕宽度的1/2 我已经阅读了多个UICollectionViewLayout和UICollectionViewDelegateFlow

我正在尝试将集合视图配置为在所附图像中显示以下自定义布局: . 本质上,我希望能够配置我的集合视图,使其看起来基于行而不是列。例如:

第1行:3个大小相等的正方形,每个正方形为屏幕宽度的1/3

第2行:1个正方形,即屏幕宽度的2/3,然后堆叠2个正方形 每个屏幕的宽度各为屏幕宽度的1/3

第3行:填充屏幕宽度的1个矩形

第4行:2个大小相等的正方形,每个正方形为屏幕宽度的1/2


我已经阅读了多个
UICollectionViewLayout
UICollectionViewDelegateFlowLayout
教程,但找不到我需要的信息

您需要实现一个自定义的
UICollectionViewLayout

  • 预先计算重复中所有方块的位置
  • 使用(重复高度)*(集合中的项目数)/(重复中的项目数)+中剩余部分的高度返回内容的高度(这意味着您应该在步骤1中缓存每个项目的内容高度,但高度不是该正方形的高度(它是该行中最高元素的高度)
  • 在中,您需要确定rect从哪个重复行开始,在哪个重复行结束。然后从步骤1返回这些行的所有缓存布局属性,但您必须加回一个等于(重复计数)/(第一项索引)*(重复高度)的y值
  • 基本上这是一堆数学问题,但当你把它分成重复的部分时,问题就变成了我在哪个重复中(划分)以及我需要在重复中的哪个元素(模数),这就更容易解决了

    我做了一些类似的事情,但是有多次重复,可以按照不同的顺序安排,并且花了几个小时才能让它正常工作,没有任何错误。这需要大量的数学运算,非常乏味