У меня возникла проблема с существующим приложением, когда я пытаюсь исправить несколько неполадок в macOS 10.13. У меня есть небольшой NSCollectionView, который похож на небольшой ежемесячный календарь в приложении «Календарь». Он отображает дни и прокручивается вертикально при нажатии. Однако в macOS 10.13 представление коллекции отображает только несколько строк и не прокручивается. Я проверил, что источник данных вызывается правильно и пытается загрузить дополнительные элементы, но не прокручивает их.
Я создал небольшой пример приложения, который также демонстрирует проблему. Это базовое приложение macOS, которое добавляет NSCollectionView через основную раскадровку и имеет общий класс NSCollectionViewItem, загружаемый из пера. Весь код в контроллере основного вида:
- (void)viewDidLoad {
[super viewDidLoad];
NSNib *nib = [[NSNib alloc] initWithNibNamed:@"FooCollectionViewItem" bundle:nil];
[self.collectionView registerNib:nib forItemWithIdentifier:@"foo"];
}
- (void)viewDidAppear {
[super viewDidAppear];
[self.collectionView reloadData];
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
}
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView {
return 1;
}
- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 2000;
}
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {
FooCollectionViewItem *item = [collectionView makeItemWithIdentifier:@"foo" forIndexPath:indexPath];
item.fooField.stringValue = [NSString stringWithFormat:@"%ld", indexPath.item];
return item;
}
Получившееся приложение выглядит так:
К сожалению, это полностью представление коллекции. Прокрутка не прокручивает дополнительные элементы. Я загрузил пример приложения на https://www.dropbox.com/sh/wp2y7g0suemzcs1/AABVKfTZq54J7riy6BR7Mhxha?dl=0 на случай, если это окажется полезным. Любые идеи, почему это ломается на 10.13 для меня?
setFrameSize
не работает для меня) это происходит только в том случае, если для параметра «Системные настройки» Показать полосы прокрутки: установлено значение «При прокрутке», но не «Всегда». См. stackoverflow.com/questions/57374020. - person Thomas Tempelmann   schedule 06.08.2019