Mon NSCollectionView dessine mes éléments NSCollection les uns sur les autres. MISE À JOUR: J'ai ajouté un exemple de projet GitHub Sample ProjectNSCollectionView dessine NSCollectionViewItems l'un sur l'autre
MISE À JOUR: Cela a quelque peu changé When the app first launches it looks like this
MISE À JOUR Mon exemple actuel a deux vues qui sont actuellement là-bas propres fichiers nib, avec NScollectionViewItem
objets dédiés, ils sont actuellement les mêmes pour les tests. J'ai fondamentalement un NSCollectionViewItem qui a pour enfant une vue avec le NSTextField dedans. Avec toutes les contraintes.
Pour la vue de la collection, elle est configurée en tant que contrôleur de grille, et idéalement, j'aimerais avoir une colonne.
Afin de le charger avec des données que je fait mon ViewController le NSCollectionViewDataSource, et mis en œuvre le - (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
et - (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
CODE MISE À JOUR complet Code inclus:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[collectionView registerClass:ItemOne.class forItemWithIdentifier:@"Item1"];
[collectionView registerClass:ItemTwo.class forItemWithIdentifier:@"Item2"];
cellArray = [@[@"Item1", @"Item2", @"Item1", @"Item2", @"Item1"] mutableCopy];
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
// Update the view, if already loaded.
}
#pragma mark - NSCollectionViewDatasource -
- (NSInteger)collectionView:(NSCollectionView *)collectionView
numberOfItemsInSection:(NSInteger)section {
// We are going to fake it a little. Since there is only one section
NSLog(@"Section: %ld, count: %ld", (long)section, [cellArray count]);
return [cellArray count];
}
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"IndexPath: %@, Requested one: %ld", indexPath, [indexPath item]);
NSLog(@"Identifier: %@", [cellArray objectAtIndex:[indexPath item]]);
NSCollectionViewItem *theItem = [collectionView makeItemWithIdentifier:[cellArray objectAtIndex:[indexPath item]] forIndexPath:indexPath];
return theItem;
}
MISE À JOUR Le ItemOne et les classes ItemTwo sont toutes deux des classes vides, la plume de chacune a un NSCollectionViewItem
qui à son tour a une vue, avec étiquette. La vue est connectée au NSCollectionViewItem
par la propriété de vue dans NSCollectionViewItem
. Il n'y a aucune contrainte, sauf pour celles par défaut
La grille NSCollectionView
est configuré comme suit:
Mise en page: Grille Dimensions: Lignes Max: 0 colonnes Max: 1 min Taille de l'item: Largeur: 250 Hauteur: 150 Max Taille de l'article: Largeur: 250 Hauteur: 150
Ceci est le code pour mettre en place le tout, à ce stade ne pas le lier à une source de données.
Il semble que peu importe ce que je change les paramètres ou même en changeant le type de CollectionView à Flow ne change rien, il semble identique.
Je l'ai abordé comme un problème AutoLayout parce qu'à l'origine il y avait quelques problèmes de mise en page automatique, mais ceux qui ont tous été résolus.
Toute aide serait grandement appréciée.
Avons fait quelques progrès! J'ai retiré les NSCollectionViewItems du storyboard et les ai mis dans leurs propres plumes avec des classes personnalisées. J'ai enregistré les classes et changé ma matrice pour inclure l'identifiant. Qui charge les deux vues dans deux colonnes distinctes, même si la grille est définie sur une colonne. Dès que je fais défiler la vue, les deux NSCollectionViewItems redeviennent un. – Tempus
J'ai essayé votre code et cela fonctionne. Que se passe-t-il lorsque vous supprimez toutes les contraintes des éléments? Comment avez-vous mis en place la disposition de la grille? – Willeke
Il semble que j'aurais pu penser à tout faux. J'ai donc une version de travail dans le GitHub Repo, mais cela fonctionne avec Flow et non Grid, et Grid n'a jamais fonctionné de la manière dont je m'y attendais. Et je suis capable de créer une seule colonne, en rendant la taille de l'objet aussi grande que la taille de la vue. Donc, c'est un peu travailler. Cependant, je veux voir si je peux avoir des vues avec des hauteurs différentes – Tempus