Ich habe Probleme, die Zellen in einer UICollectionView in konsistenter Weise anzuzeigen. Die anfängliche Anzeige der Zellen ist korrekt, jedoch ist jedes Mal, wenn der Benutzer vorbei und dann zurück zu einer Gruppe von Zellen scrollt, die Anzeige falsch. Zeilen sollten immer nur 2 oder 1 Zelle (n) enthalten. 2 Zellen nehmen jeweils die halbe Bildschirmbreite ein, 1 Zelle nimmt die volle Breite ein.UICollectionView nicht konsistentes Layout, UICollectionViewFlowLayout
- (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;
}
Im Folgenden finden Sie ein Beispiel für die Sammlungsdaten.
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>"
);
}
)
Die Bilder unten zeigen den gleichen Abschnitt der Sammlungsansicht.