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
Odpowiedz
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.
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
Czy to nadal jest problem? Nie mogę odtworzyć tego efektu w systemie OS X 10.9. – jemmons
@jemmons Nie jestem pewny, że zaktualizuję się, gdy będę już w Mavericks. – Dov