Рисование фона NSTableView за его пределами - PullRequest
10 голосов
/ 25 февраля 2012

У меня проблема с тех пор, как Лев ввел упругую прокрутку (на фото ниже). Когда вы прокручиваете мое табличное представление (на основе ячеек, с чередующимися цветами строк) за его пределами, фон не рисует. Я попытался сделать свой собственный рисунок в -[drawBackgroundInClipRect:], но кажется, что вы не можете выйти за пределы представления таблицы. Как я могу расширить фон на эластичную область прокрутки?

Scrolling left of table

1 Ответ

0 голосов
/ 08 января 2015

В ответ на ваш вопрос

Вид чертежа вне его границ, как правило, запрещен. При использовании чередующихся цветов фона NSTableView рисует свой фон напрямую. Но в табличном представлении, основанном на представлении, используется NSTableRowView, и если у него есть собственный цвет фона, это создает еще большую проблему.

Плохие новости

Сборка NSScrollView (и его различных частей), NSTableView и NSTableHeaderView сложна сама по себе. Когда вы добавляете функциональность, основанную на представлениях, в смесь (где каждая строка имеет представление, а каждая ячейка имеет свое собственное представление, и каждая из них используется повторно, анимируется и т. Д.), Переопределение этого поведения «не может идти по жизни, сынок !» ; -)

Благая весть

Проблема чередующихся цветов фона, не распространяющихся в упруго-растянутом виде прокручиваемой таблицы , была решена (по крайней мере, 10.10, что я могу сказать), так что это больше не проблема, если у вас нет представления строк / ячеек с пользовательскими фонами или просто фоновыми цветами.

Общее решение для пользовательских представлений (с прокруткой)

Для всех других видов прокрутки с фонами с линейкой, которые вы хотите расширить для упругой прокрутки, вам понадобится пользовательский подкласс NSScrollView, который ожидает, что представление документа (ваше пользовательское представление прокрутки) будет соответствовать определенному вами протоколу (например, -(NSImage *)backgroundImageForClipViewBounds:) ). Представление прокрутки будет наблюдать его представление содержимого (NSClipView) для границ уведомлений об изменениях и помечать себя для отображения. Когда вызывается представление -drawRect: для прокрутки, оно запрашивает прокручиваемое представление для -backgroundImageForClipViewBounds: (через ваш протокол) и рисует его в себе, тем самым делая «бесконечный фон» прокручиваемого представления своим собственным.

Я не проверял эту теорию, но я верю, что она будет работать. Надеюсь, это поможет.

...