Рисование фона NSTableView за пределами его границ

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

Scrolling left of table

Ответ 1

Отвечая на ваш вопрос

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

Плохая новость

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

Хорошие новости

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

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

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

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