- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在实现自定义流布局。它有 2 个主要的重写方法来确定单元格的位置:layoutAttributesForElementsInRect
和 layoutAttributesForItemAtIndexPath
。
在我的代码中,调用了 layoutAttributesForElementsInRect
,但未调用 layoutAttributesForItemAtIndexPath
。什么决定了哪个被调用? layoutAttributesForItemAtIndexPath
在哪里被调用?
最佳答案
layoutAttributesForElementsInRect:
不一定调用 layoutAttributesForItemAtIndexPath:
.
事实上,如果你继承UICollectionViewFlowLayout
,流式布局将准备布局并缓存生成的属性。所以,当layoutAttributesForElementsInRect:
被调用,它不会询问layoutAttributesForItemAtIndexPath:
,但只使用缓存的值。
如果您想确保布局属性始终根据您的布局进行修改,请为 layoutAttributesForElementsInRect:
实现一个修饰符和 layoutAttributesForItemAtIndexPath:
:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributesInRect = [super layoutAttributesForElementsInRect:rect];
for (UICollectionViewLayoutAttributes *cellAttributes in attributesInRect) {
[self modifyLayoutAttributes:cellAttributes];
}
return attributesInRect;
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewLayoutAttributes *attributes = [super layoutAttributesForItemAtIndexPath:indexPath];
[self modifyLayoutAttributes:attributes];
return attributes;
}
- (void)modifyLayoutAttributes:(UICollectionViewLayoutAttributes *)attributes
{
// Adjust the standard properties size, center, transform etc.
// Or subclass UICollectionViewLayoutAttributes and add additional attributes.
// Note, that a subclass will require you to override copyWithZone and isEqual.
// And you'll need to tell your layout to use your subclass in +(Class)layoutAttributesClass
}
关于ios - UICollectionViewLayout layoutAttributesForElementsInRect 和 layoutAttributesForItemAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490841/
我完全不知道为什么会这样,但无论出于何种原因,我正在使用的 Collection View 正在无限循环 [UICollectionViewData layoutAttributesForElemen
我已经实现了我自己的从 UICollectionViewLayout 子类化的集合 View 布局。在 prepare我计算和缓存布局属性。 在 layoutAttributesForElements
在我的使用中 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 在自定义布局子类中,我只看到大部分是 1024 的倍数的矩形坐标值
我想创建一个垂直无限滚动,在阅读了这么多教程后我明白我需要子类化 UICollectionViewFlowLayout。问题是我不完全明白该怎么做。 我试过以下方法:1. 创建了一个新类 newVie
此代码用于 swift 2.3 及更早版本。但是当我在 Swift 3 中更新它时,应用程序崩溃了。 这是swift 2.3中的代码 override func layoutAttributesFor
我想创建一个自定义 UICollectionViewFlowLayout 来更改标题和单元格在 Collection View 中的显示方式。我将 UICollectionViewFlowLayout
我正在实现自定义流布局。它有 2 个主要的重写方法来确定单元格的位置:layoutAttributesForElementsInRect 和 layoutAttributesForItemAtInde
我有一个包含项目的 UICollectionView。我希望中心的项目是全彩色的,而靠近收藏 View 垂直边界的项目会慢慢淡出。我想出了 layoutAttributesForElementsInR
我已经创建了自定义布局子类 UICollectionViewLayout。它完全按照我的需要工作,但是当集合只有少量元素(如“3”)时,layoutAttributesForElementsInRec
我想在 iPhone 应用程序中模仿 Sony Xperia 中提供的图库应用程序的功能。我的画廊应用程序,图像按日期分组显示在网格中,该部分的第一张照片是其他照片的两倍。放大/缩小时,所有照片都会缩
当我将我的项目从 Swift 1.2 迁移到 2.0 时,我遇到了一个问题:我正在为我的 UICollectionView 使用自定义布局,它在 Swift 1.2 中运行良好。但是,在 Swift
我是一名优秀的程序员,十分优秀!