Предупреждения NSCollectionView, ссылающиеся на UICollectionViewFlowLayout

У меня есть NSOutlineView, и каждая ячейка внутри него имеет NSCollectionView (горизонтальный), настроенный с использованием автомакета с «высотой» collectionView, определяющей высоту ячейки layoutView. Каждый элемент в collectionView может иметь динамическую ширину, и я использую «фиктивный» элемент collectionView для определения размера каждого элемента из его содержимого, а затем в outlineView:viewForTableColumn:itemметод делегата, получая высоту collectionView с помощью collectionView.collectionViewLayout.collectionViewContentSize.heightи используя это, чтобы установить «ограничение высоты» collectionView (для управления динамической высотой ячейки).

По большей части это работает нормально, но я несколько раз получаю это предупреждение в консоли:

Поведение UICollectionViewFlowLayout не определено, потому что: ширина элемента должна быть меньше, чем ширина UICollectionView минус вставки левого и правого значений раздела, минус вставки левого и правого значений содержимого. Соответствующий экземпляр UICollectionViewFlowLayout — <NSCollectionViewFlowLayout: 0x10e3b7f80>, и он присоединен к <MacTagsCustomCollectionView:0x10e3b7840>. Установите символическую точку останова в UICollectionViewFlowLayoutBreakForInvalidSizes, чтобы перехватить это в отладчике.

Я пытался погуглить это, но не могу найти хорошего объяснения этой проблемы. Я не уверен, почему он ссылается на «UICollectionViewFlowLayout», когда это приложение AppKit и использует NSCollectionView. Кроме того, установка символической точки останова UICollectionViewFlowLayoutBreakForInvalidSizes не помогает и никогда не срабатывает.

Вот некоторый код из viewForTableColumn моего layoutView, где я получаю высоту collectionView и, следовательно, высоту ячейки:

      DataCellView *result = [outlineView makeViewWithIdentifier:@"DataWithTags" owner:self];
if (result.tagListCollectionView.delegate == nil) {
    result.tagListCollectionView.delegate = self;
    result.tagListCollectionView.dataSource = self;
    result.tagsCollectionViewScrollView.automaticallyAdjustsContentInsets = NO;
    
    NSNib *cellNib = [[NSNib alloc] initWithNibNamed:@"MacTagsForPersonItem" bundle:nil];
    [result.tagListCollectionView registerNib: cellNib forItemWithIdentifier:@"PersonTagsCollectionViewItemID"];
    if (self.tagsSizingItem == nil) {
        NSArray *topLevelObjects;
        [cellNib instantiateWithOwner:self.tagsSizingItem topLevelObjects: &topLevelObjects];
        for (id topLevelObject in topLevelObjects) {
            if ([topLevelObject isKindOfClass:[MacPersonTagsCollectionViewItem class]]) {
                self.tagsSizingItem = topLevelObject; // need this to determine each collectionView cell's size based on the text
                break;
            }
        }
    }

    result.tagListCollectionView.backgroundColors = @[[NSColor clearColor]];
    result.tagListCollectionView.enclosingScrollView.backgroundColor = [NSColor clearColor];
    result.tagsCollectionViewScrollView.verticalScroller.hidden = YES;
    result.tagListCollectionView.outlineView = outlineView; // so scroll in tagsCollectionView can be passing onto the outlineView instead
}

result.tagListCollectionView.tagsPerson = person;
[result.tagListCollectionView reloadData];

result.frame = outlineView.bounds; // important to do this
[result layoutSubtreeIfNeeded];
[result.tagListCollectionView layoutSubtreeIfNeeded];


if (person.tagsCacheHeight == 0) {
    // use cacheHeight because when outlineView reloads after contacts syncing, it collectionView height sizing goes crazy for some reason.        
    person.tagsCacheHeight = result.tagListCollectionView.collectionViewLayout.collectionViewContentSize.height;
}
result.collectionViewHeightConstraint.constant = person.tagsCacheHeight;
[result.tagListCollectionView.collectionViewLayout invalidateLayout];
return result;

Я использовал ту же базовую технику с моим приложением для iOS, чтобы создать ячейки tableView с изменяемым размером collectionView внутри каждой ячейки и даже в другой части моего приложения Mac, но, похоже, это не работает для этого конкретного представления и дает это странное предупреждение. И это не просто предупреждение в моем случае, поскольку, если я попытаюсь настроить NSCollectionViewLayout (я хочу сделать их выровненными по левому краю), макет сломается и вернется к этому равномерно распределенному макету потока по умолчанию, который я не хочу . Интересно, что предупреждение исчезает, если я устанавливаю фиксированную ширину для размера элемента collectionView. Я пытался установить минимальное расстояние между элементами на 0, но это не помогает. Вставка раздела равна 0 (каждый collectionView имеет только 1 раздел).

Любые советы о том, как выяснить, что может быть причиной этой проблемы?

0 ответов

Другие вопросы по тегам