【问题标题】:To use Flow Layout, or to Customize?使用流布局,还是自定义?
【发布时间】:2013-02-28 12:53:01
【问题描述】:

我想构建一个集合视图布局,如下图所示。

首先,我想将特定部分的所有项目保留在同一行。当用户垂直滚动时,这些部分会滚动到页面之外。当用户水平滚动时,项目左右滚动(向左滚动时“折叠”在部分标题下,从右侧将新项目带到屏幕上)。

我了解 Apple 说“如果它看起来像一个网格,您可以使用 Flow Layout”,但我想了解这是否只是笼统的声明,或者上述内容是否会突破限制。

上面的布局可以使用 FlowLayout 来完成,还是我最好从头开始构建自定义布局?

如果您是布局方面的专家,并且这是“儿童游戏”,我很乐意看到如何继续的示例。

谢谢!

【问题讨论】:

    标签: ios cocoa-touch uikit uicollectionview uicollectionviewlayout


    【解决方案1】:

    你需要使用继承 UICollectionViewFlowLayout 的布局类。通过这样做,您可以使用以下方法自定义布局行为。此外,您还可以获得 Flow Layout 的所有钩子。

     - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect; // return an array layout attributes instances for all the views in the given rect
    
     - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
      - (void)prepareLayout;
    

    【讨论】:

    • 谢谢,事实证明,我还需要使滚动布局无效,以便我的标题可以“粘”。
    • @AndrewTheken 你是如何让标题变粘的?尝试为它找到解决方案,但我发现的所有东西都对我不起作用......
    【解决方案2】:

    您无需费力创建自定义 UICollectionViewLayout 子类,而是可以通过使用标准表格视图来实现您正在寻找的行为,每行包含一个标题视图的单元格,以及一个水平- 为行项目滚动集合视图。

    我整理了一个little example that you can download here

    当您垂直滚动表格视图时,需要做一些额外的工作来保持集合视图的滚动位置,因此我将其保存到实例变量中,并在请求表格单元格时恢复它。除此之外,我认为示例项目相当简单。

    【讨论】:

    • 这是一个很好的答案。从技术上讲,所有行都应该同时向左/向右滚动。为这个好例子点赞!
    • 这很好,很简单。
    【解决方案3】:

    Here 是我的实现!希望对您有所帮助!

    【讨论】:

      【解决方案4】:

      您不能在这里继承 UICollectionViewFlowLayout,因为它是基于单行的布局。

      【讨论】:

        【解决方案5】:

        感谢您的出色回答。这个对我有用。您还可以为每个 tableview 部分指定一行,并为每个 collectionview 添加标题部分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-02-06
          • 1970-01-01
          • 1970-01-01
          • 2021-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多