ios – UICollectionView布局不一致,UICollectionViewFlowLayout

前端之家收集整理的这篇文章主要介绍了ios – UICollectionView布局不一致,UICollectionViewFlowLayout前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法以一致的方式在UICollectionView中显示单元格.单元的初始显示是正确的,但是每次用户滚动过去然后返回到一组单元格时,显示都是不正确的.行应该只包含2个或1个单元格. 2个单元格,每个显示宽度的一半,1个单元格占全宽.
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return [self preferredSizeForIndexPath:indexPath];
}

- (CGSize)preferredSizeForIndexPath:(NSIndexPath *)indexPath {

    BOOL isLastObjectInSection = NO;
    NSString *sectionKey = [[arrCollectionData[indexPath.section] allKeys] objectAtIndex:0];
    DLog(@"SectionKey: %@",sectionKey);
    NSArray *arrSection = [arrCollectionData[indexPath.section] objectForKey:sectionKey];
    DLog(@"ArrSection: %@",arrSection);

    if ( arrSection[indexPath.row] == arrSection.lastObject ) {
        if( arrSection.count % 2 != 0 ) {
            isLastObjectInSection = YES;
        }
    }

    CGSize cellSize = CGSizeZero;
    if (UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
        if (isLastObjectInSection == YES) {
            cellSize = CGSizeMake(IPAD_BADGE_WIDTH_LANDSCAPE_WIDE,IPAD_BADGE_HEIGHT_LANDSCAPE_WIDE);
        } else {
            cellSize = CGSizeMake(IPAD_BADGE_WIDTH_LANDSCAPE,IPAD_BADGE_HEIGHT_LANDSCAPE);
        }
    } else {
        if (isLastObjectInSection == YES) {
            cellSize = CGSizeMake(IPAD_BADGE_WIDTH_WIDE,IPAD_BADGE_HEIGHT_WIDE);
        } else {
            cellSize = CGSizeMake(IPAD_BADGE_WIDTH,IPAD_BADGE_HEIGHT);
        }
    }
    DLog(@"CellSize: %@",NSStringFromCGSize(cellSize));
    return cellSize;

}

以下是收集数据的示例.

Printing description of self->arrCollectionData:
<__NSArrayI 0x94bbc40>(
{
    "March 12,2013" =     (
        "<FMLeafTimelineContainer: 0x94b2430>","<FMLeafTimelineContainer: 0x94b3670>"
    );
},{
    "February 25,2013" =     (
        "<FMLeafTimelineContainer: 0x94b4500>"
    );
},{
    "February 14,2013" =     (
        "<FMLeafTimelineContainer: 0x94b48f0>","<FMLeafTimelineContainer: 0x94b3a60>"
    );
},{
    "February 12,2013" =     (
        "<FMLeafTimelineContainer: 0x94b3ce0>","<FMLeafTimelineContainer: 0x94b2b00>"
    );
},{
    "February 4,2013" =     (
        "<FMCommunityTimelineContainer: 0x94b4e90>","<FMCommunityTimelineContainer: 0x94b5050>","<FMCommunityTimelineContainer: 0x94b5f70>"
    );
},{
    "January 30,2013" =     (
        "<FMCommunityTimelineContainer: 0x94b6ad0>","<FMCommunityTimelineContainer: 0x94b5a90>"
    );
},{
    "January 24,2013" =     (
        "<FMCommunityTimelineContainer: 0x94b5d00>","<FMCommunityTimelineContainer: 0x94b6d90>"
    );
},{
    "January 22,2013" =     (
        "<FMCommunityTimelineContainer: 0x94b6440>"
    );
},{
    "January 21,2013" =     (
        "<FMCommunityTimelineContainer: 0x94b6260>","<FMCommunityTimelineContainer: 0x94b62e0>","<FMCommunityTimelineContainer: 0x94b70c0>","<FMCommunityTimelineContainer: 0x94b55a0>","<FMCommunityTimelineContainer: 0x94b82d0>","<FMCommunityTimelineContainer: 0x94b78b0>"
    );
},{
    "December 20,2012" =     (
        "<FMCommunityTimelineContainer: 0x94b53f0>"
    );
},{
    "December 6,2012" =     (
        "<FMCommunityTimelineContainer: 0x94b7200>"
    );
},{
    "December 4,2012" =     (
        "<FMCommunityTimelineContainer: 0x94b72b0>"
    );
},{
    "November 19,2012" =     (
        "<FMCommunityTimelineContainer: 0x94b7ae0>"
    );
}
)

下面的图片都展示了集合视图的相同部分.

解决方法

问题是由父实例的子视图引起的,该子视图具有在实例化时分配的固定帧大小. Overrode setFrame:用于UICollectionView子类以分配子视图帧的值,每次单元格出列并重新排队时调用setFrame:进行相应调整.
原文链接:/iOS/333445.html

猜你在找的iOS相关文章