未解決の macOS 10.13 のバグをいくつか修正しようとしているときに、既存のアプリで問題が発生しました。カレンダー アプリの小さな月間カレンダーに似た小さな NSCollectionView があります。日付を表示し、クリックすると縦にスクロールします。ただし、macOS 10.13 では、コレクション ビューは数行しか表示されず、スクロールしません。データ ソースが正しく呼び出され、追加の項目を読み込もうとすることを確認しましたが、スクロールしません。
この問題を示す小さなサンプル アプリケーションを作成しました。これは、メイン ストーリーボードを介して NSCollectionView を追加し、nib から読み込まれた汎用 NSCollectionViewItem クラスを持つ基本的な macOS アプリです。メイン ビュー コントローラーのコード全体は次のとおりです。
- (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で壊れている理由はありますか?