2012-02-25 24 views
10

Mam problem, ponieważ Lion wprowadził elastyczne przewijanie (na zdjęciu poniżej). Podczas przewijania widoku tabeli (zależnego od komórki, z naprzemiennymi kolorami wierszy) poza jego granicami tło nie rysuje. Próbowałem zrobić własny rysunek w -[drawBackgroundInClipRect:], ale wydaje się, że nie można przekroczyć granic widoku tabeli. Jak mogę rozszerzyć tło na elastyczne terytorium przewijania?Rysowanie tła NSTableView poza jego granicami

Scrolling left of table

+0

Jest to zawierający NSScrollView, który wykonuje rysunek w tym obszarze. Być może możesz utworzyć wzór dla naprzemiennych wierszy i ustawić go jako kolor tła w widoku przewijania? – Aderstedt

+1

Czy to nadal jest problem? Nie mogę odtworzyć tego efektu w systemie OS X 10.9. – jemmons

+0

@jemmons Nie jestem pewny, że zaktualizuję się, gdy będę już w Mavericks. – Dov

Odpowiedz

0

W odpowiedzi na swoje pytanie

widoku rysunku poza jej granicami jest generalnie nie-nie. Podczas używania zmiennych kolorów tła NSTableView rysuje swoje tło bezpośrednio. Ale w widoku tabeli opartym na widoku NSTableRowView jest używany i jeśli ma własny kolor tła, stanowi to jeszcze większe wyzwanie.

The Bad Aktualności

skupisko z NSScrollView (i różnych jego częściach), NSTableView i NSTableHeaderView jest skomplikowana na własną rękę. Po dodaniu funkcji widoku do miksu (gdzie każdy wiersz ma widok, a każda komórka ma swój własny widok, a każdy z nich jest ponownie wykorzystywany, animowany itd.), Nadpisywanie tego zachowania "nie ma sposobu na życie, syn ! " ;-)

Dobra Nowina

Kwestia przemian kolory tła nie rozciągające się elastycznie rozciągniętej przewijane widoku tabeli został został rozwiązany (przynajmniej na 10.10, co mogę powiedzieć), a więc to już nie jest problem, chyba że masz widoki wiersza/komórki z niestandardowymi tła lub tylko kolory tła.

ogólne rozwiązanie do tworzenia własnych Dokumentu (Scrolled) Widoki

Dla wszystkich innych przewinęły poglądów z rządzonych środowisk chcesz przedłużyć do elastycznego przewijania, musisz niestandardową NSScrollView podklasę, która spodziewa się widok dokumentu (Twój niestandardowy przewijany widok), aby dostosować się do zdefiniowanego protokołu (na przykład -(NSImage *)backgroundImageForClipViewBounds:). Widok przewijania będzie obserwować jego widok zawartości (NSClipView) dla granic zmiana powiadomień i flaga sama dla wyświetlacza. Kiedy wywoływany jest widok przewijania -drawRect:, zapyta on przewijany widok o jego -backgroundImageForClipViewBounds: (przez twój protokół) i narysuje go w sobie, co spowoduje, że "nieskończone tło" przewinięcia stanie się jego własnym.

Nie testowałem tej teorii, ale wierzę, że to zadziała. Mam nadzieję, że to pomoże.