Programmgesteuert erstellte UICollectionView scrollt nicht
-
12-12-2019 - |
Frage
Ich erstelle einen horizontalen Picker, indem ich a verwende UICollectionView
.Es ist ganz einfach:A UIView
mit einem UICollectionView
programmgesteuert erstellt, mit UICollectionViewFlowLayout
mit einem Abschnitt, Scrollen auf horizontal eingestellt.Es erscheint auf dem Bildschirm, komplett mit den richtigen Daten in den richtigen Zellen.Aber es scrollt nicht – tatsächlich reagiert es überhaupt nicht auf Benutzerinteraktionen.
Hier ist der Initialisierer für die Ansicht:
- (id)initWithFrame:(CGRect)frame andItemData:(NSArray *)itemData
{
self = [super initWithFrame:frame];
if (self) {
_itemData = itemData;
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[flowLayout setItemSize:CGSizeMake(kCellWidth, kCellHeight)];
[flowLayout setMinimumInteritemSpacing:0.f];
[flowLayout setMinimumLineSpacing:0.f];
_collectionView = [[UICollectionView alloc] initWithFrame:[self frame] collectionViewLayout:flowLayout];
[_collectionView setDataSource:self];
[_collectionView setDelegate:self];
[_collectionView setBounces:NO];
[_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"HorizontalPickerCell"];
[self addSubview:_collectionView];
}
return self;
}
Ich habe versucht, die Einstellung programmgesteuert vorzunehmen UserInteractionEnabled
Zu YES
, aber das machte keinen Unterschied (und sollte es auch nicht sein, seitdem UserInteractionEnabled
ist eingestellt auf YES
standardmäßig).FWIW, die Sammlungsansicht verwendet Standard UICollectionViewCell
s mit UILabel
s hinzugefügt contentView
s als Unteransichten.
Irgendeine Idee, warum das nicht scrollt?Jede Hilfe wird sehr geschätzt.
Lösung
Ok, es stellte sich heraus, dass das von meiner Seite sowohl dumm als auch leicht zu beheben war.Ich habe den Rahmen der Sammlungsansicht auf den seiner übergeordneten Ansicht festgelegt frame
eher als es bounds
.Dies verursachte alle möglichen Probleme mit dem automatischen Layout und führte dazu, dass Berührungsereignisse einfach nicht registriert wurden.Jetzt ist alles behoben.