NSOutlineView – как получить горизонтальную полосу прокрутки

Я пытаюсь создать простой браузер папок, показывающий древовидную структуру с помощью NSOutlineView. Использование monoMac и Xamarin Studio с построителем интерфейса XCode для пользовательского интерфейса.

Проблема, с которой я сталкиваюсь сейчас, заключается в том, как изменить размер столбца по ширине содержимого и/или как обрезать текст, отображаемый в столбце.

Первая настройка, которую я попробовал, — это включение AutoresizesOutlineColumn. Это в некоторой степени изменяет размер столбца, но как только он встречает имя с дефисами, он изменяет размер только до первого дефиса, и оттуда кажется, что он больше не изменяет размер.

Затем я попытался включить изменение размера столбца на «AutoResize with table» и ячейку на «усечение заголовка», но это тоже не работает, как я ожидал.

Я хочу, чтобы столбец всегда был на всю ширину контекста, а затем в представлении отображалась горизонтальная полоса прокрутки. Любые указатели, как настроить это? Я искал в Интернете, но примеры, которые я нашел, в основном касаются того, как использовать источник данных, и ничего о том, как настроить само представление.

Скриншот 2 показывает проблему, как вы можете видеть, при изменении размера имя узла обрезается, а не усекается, и полоса прокрутки не отображается.

введите здесь описание изображения введите здесь описание изображения


person Jesper Kristiansen    schedule 06.01.2016    source источник


Ответы (3)


Каждое представление схемы, показанное на вашем изображении, фактически заключено в собственное представление прокрутки (NSScrollView). Чтобы получить горизонтальную полосу прокрутки, вам нужно изменить свойства представления прокрутки, а не самого представления схемы.

Извините, я не могу дать вам точный код и синтаксис, так как не знаком с мономаком, но в Objective-C код выглядел бы следующим образом:

outlineView.enclosingScrollView.hasHorizontalScroller = YES;

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

Если вы используете Xcode Interface Builder для создания файлов пера и в файле пера присутствуют представления структуры, вы должны иметь возможность установить свойство «Показать горизонтальную прокрутку», чтобы предотвратить необходимость делать это программно во время выполнения.

person NSGod    schedule 06.01.2016

Мне удалось выяснить, почему изменения в настройках моей ячейки не отображались в пользовательском интерфейсе.

Оказывается, это основная ошибка новичка (я так думаю).

Во-первых, у меня не было идентификатора ячейки, используемого в коде, установленном в TableCellView, а вместо этого в дочернем представлении TableViewCell.

Во-вторых, в GetView я создал экземпляр NSTextField вместо NSTableCellView.

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

Но я все еще не могу заставить полосы прокрутки показать, как я этого хочу. Просмотры прокрутки установлены автоматически в IB. Если я включу AutoResizesOutlineColumn, а затем установлю для изменения размера столбца в IB значение none, появится полоса прокрутки, но она сохранит ширину столбца с момента создания окна. Если я установлю для параметра изменения размера значение «автоматическое изменение размера с таблицей», то размер столбца изменится, но прокрутка не будет отображаться, когда содержимое ячейки превышает ширину.

person Jesper Kristiansen    schedule 07.01.2016

Я столкнулся с той же проблемой и выяснил, изменив ширину NSTableColumn моего OutlineView.

person Lakshmi Yadav    schedule 11.11.2020