【问题标题】:iOS7 , In CollectionView , When will this method be called? layoutAttributesForElementsInRect:iOS7,在 CollectionView 中,什么时候会调用这个方法? layoutAttributesForElementsInRect:
【发布时间】:2015-10-14 01:34:54
【问题描述】:

我是一名新的 iOS 开发人员。

最近我正在学习 UICollectionView,我正在尝试子类化 UICollectionViewLayout。

我必须实现方法

-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect

问题

我不知道这个矩形是从哪里来的?在什么情况下这个矩形会被传递给我?

PS。我认为这种方法可能更容易理解

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)path

因为indexPath是有限的和有限的,在特定的indexPath中配置cell是合理的。

但是矩形可能是无限的,我不知道这个矩形是从哪里来的。

【问题讨论】:

    标签: ios objective-c xcode ios7 uiview


    【解决方案1】:

    创建布局子类时,您必须重写这两个方法。

    layoutAttributesForItemAtIndexPath 告诉集合视图在特定索引路径的单元格的布局属性是什么。您只能将其用于单元格。

    layoutAttributesForElementsInRect 被系统调用,并带有一个矩形,该矩形包含要在其中显示的所有“视觉元素”——单元格、补充或装饰视图。将其视为即将显示的集合视图的一部分。它告诉集合视图矩形中包含哪些属性,因此它可以创建相应的视图。

    基本上,您可以在这些函数中进行所有布局属性计算(框架、变换等),或者您可以提前准备所有属性(可以在prepareLayout 方法中进行)并返回正确的缓存布局属性。

    【讨论】:

    • 非常感谢!但是这个矩形到底是什么意思?如果我只触摸屏幕仅移动 1px ,矩形会改变吗?最后 collectionViewContentSize , ScreenSize 和这个 Rect 之间的关系是什么? (画个图就更好了,谢谢!)
    • 两个问题:1、rect总是可见的吗?如果不是这样,为什么? 2、如果我触摸屏幕,我只移动了1px,矩形会改变吗?
    • @tiper 基本上它是所有可见元素的矩形,但您不应该假设系统内部逻辑调用此方法的任何内容,您只需要返回请求的矩形的相应属性。我认为您应该构建一个测试项目并使用它,设置一些断点,然后自己查看这些方法何时被调用。
    猜你喜欢
    • 2011-09-19
    • 2021-12-19
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多