2014-07-08 4 views
0

J'ai un NSCollectionView dans un .xib et la vue collection pour cette sous-vue élément vue de collection dans un autre .xibAutolayout NSCollectionView avec subviews

Je suis en train d'ajouter des contraintes à mon point de vue collection article pour let à

  1. Aligner les bords avec le point de vue de la superview
  2. Redimensionner lui-même selon la superview

L'élément de vue de collection dans ce deuxième fichier .xib est un NSTableView avec des contraintes comme indiqué dans la pièce jointe.

Constraints configuration

Au démarrage, je reçois le texte suivant

  1. Le superview, i.e. NSCollectionView est plus grande que ses sous-vues.
  2. Si je redimensionne toute la fenêtre et la redimensionne, NSCollectionView se redimensionnera également, mais pas les sous-vues. Voir la deuxième pièce jointe.

enter image description here

+1

Les éléments fournissent habituellement leur taille à la vue de collection, qui les expose ensuite dans une grille. Cela n'a pas beaucoup de sens que les éléments essayent de se conformer à une taille fournie par la vue de collection. Comment la vue de collection choisirait-elle une taille? Cela dit, vous pouvez définir une taille d'élément minimale et maximale dans la vue de collection. –

+0

Je vois. Est-ce possible avec NSScrollView? Je sais que NSCollectionView est intégré dans un NSScrollView – Rabiees

+0

Atteindre quoi? Comment souhaitez-vous que la taille des éléments de la vue de collection soit déterminée? Vous pouvez les faire n'importe quelle taille que vous voulez. –

Répondre

2

NSCollectionView ne fera pas ce que vous voulez. Les éléments fournissent leur taille à la vue de collection, qui les expose ensuite dans une grille. Compte tenu de la mise en page à une rangée assez simple que vous essayez d'atteindre, vous pouvez utiliser un NSStackView. Si vous ne voulez pas exiger 10.9 ou plus tard, vous pouvez faire l'équivalent moral d'une vue de pile en créant simplement un simple NSView comme votre conteneur et ensuite le remplir avec des sous-vues. Vous mettriez cette vue dans une vue déroulante. La vue du conteneur aurait des contraintes pour garder son haut et son bas égaux à ceux de la vue du clip. Sa largeur ne serait pas liée à la vue du clip. (Je ne sais pas si vous voulez que le bord d'attaque de la vue Conteneur soit lié à la vue du clip, ce qui peut nécessiter quelques expérimentations.)

Définissez les contraintes de disposition pour conserver les vues sous-jacentes comme vous le souhaitez dans la vue conteneur. assez large pour les contenir tous. Vous aurez besoin de contraintes pour conserver les sommets des sous-vues liées au haut de la vue du conteneur et de la même manière pour les fonds. Cependant, assurez-vous que les sous-vues sont flexibles dans leur hauteur au moins par rapport à la priorité des contraintes vue-à-clip-vue.

0

J'ai réussi à obtenir ce que vous décrivez avec NSCollectionView en définissant itemSize égal à la largeur de la vue de collection dans FlowLayoutDelegate tout en appelant collectionView.collectionViewLayout?.invalidateLayout() dans viewWillLayout dans le contrôleur de vue pour gérer le redimensionnement.