Мой NSCollectionView рисует мои элементы NSCollection друг над другом. ОБНОВЛЕНИЕ: я добавил пример проекта Пример проекта GitHub
ОБНОВЛЕНИЕ: это несколько изменилось При первом запуске приложение выглядит так
ОБНОВЛЕНИЕ В моем текущем примере есть два представления, которые в настоящее время находятся в собственных файлах пера, с выделенными объектами NScollectionViewItem
, которые в настоящее время одинаковы для тестирования. В основном у меня есть NSCollectionViewItem, у которого есть дочернее представление с NSTextField. Со всеми ограничениями.
Для представления коллекции он настроен как контроллер сетки, и в идеале я хотел бы иметь 1 столбец.
Чтобы загрузить его данными, я сделал свой ViewController NSCollectionViewDataSource и реализовал - (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
и - (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView
itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath
ОБНОВЛЕННЫЙ КОД Полный код включен:
- (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;
}
ОБНОВЛЕНИЕ Классы ItemOne и ItemTwo являются пустыми классами, кончик каждого из них имеет NSCollectionViewItem
, который, в свою очередь, имеет представление с меткой. Представление связано с NSCollectionViewItem
свойством представления в NSCollectionViewItem
. В настоящее время нет ограничений, кроме ограничений по умолчанию.
Сетка NSCollectionView
настроена следующим образом:
Макет: Размер сетки: Максимальное количество строк: 0 Максимальное количество столбцов: 1 Минимальный размер элемента: Ширина: 250 Высота: 150 Максимальный размер элемента: Ширина: 250 Высота: 150
Это код для настройки всего этого, на данный момент не привязывая его к источнику данных.
Кажется, что какие бы я ни меняла настройки или даже меняла тип CollectionView на Flow, ничего не меняется, он выглядит одинаково.
Я подходил к этому как к проблеме AutoLayout, потому что изначально были некоторые проблемы с автоматическим макетом, но все они были решены.
Любая помощь будет принята с благодарностью.