NSOutlineView проблема с отступами

Я использую объект NSOutlineView для представления файловой структуры и обнаруживаю, что он не будет правильно делать отступы для любых дочерних элементов, которые могут быть расширены, хотя он будет создавать отступы для дочерних элементов, которые этого не делают.

Вот картинка, чтобы показать, что я имею в виду:

Пример NSOutlineView

В этом примере "AnotherFolder" является дочерним по отношению к "Folder2", однако он не имеет отступа в соответствии с другими файлами с отступом. Любопытно, что потомок "AnotherFile.java" из "AnotherFolder" делает отступ правильно (2 уровня в).

Я пытался установить свойства, такие как "indentationFollowsCells" безрезультатно. Кажется, это должно быть очень просто, но я не могу решить это.

Спасибо!

Изменить: некоторая дополнительная информация по запросу:

Я использую протокол NSOutlineViewDataSource для реализации, вот код, связанный с этим:

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return item;
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    NSMutableDictionary* dict;
    if(item == nil) {
        dict = fileTree;
    } else {
        dict = [((MyFile*) item) children];
    }

    NSArray* keys = [dict allKeys];
    NSArray* sorted = [keys sortedArrayUsingSelector:@selector(compare:)];
    NSString* key = [sorted objectAtIndex:index];
    return [dict objectForKey:key];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return [[item children] count] > 0;
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    if(item == nil) {
        return [fileTree count];
    }
    return [[item children] count];
}

1 ответ

Решение

Попробуйте изменить свой контурный вид с исходного контурного вида на обычный.

Я столкнулся с этим прямо сейчас, и мне показалось немного странным, что через девять лет после этого поста проблема все еще сохраняется.

Такое поведение встроено в стиль исходного кода: первая строка стандартного содержимого выровнена с ячейкой заголовка, а не с отступом, поэтому все смещается на один уровень.

Если вы используете ячейки заголовков, вам нужно такое поведение, и все в порядке. Если вы не хотите использовать ячейки заголовков, единственный вариант - не использовать SourceList.

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