2012-06-28 12 views
6

Scroller http://f.cl.ly/items/1b1v2D2X1D092k2R1C0i/Scrollbar.pngScroller-Hintergrund nicht transparent in NSScrollView

Hallo! Ich benutze eine NSScrollView, die eine View-basierte NSTableView hat. Immer wenn die Tabelle eine Tabellenzelle hinzufügt, erscheinen die Scroller, was in Ordnung ist, bis Sie sehen, dass die Scroller keinen transparenten Hintergrund haben. Aus irgendeinem Grund ist der Hintergrund weiß, wie Sie auf dem Bild sehen können.

Ich habe IB verwendet, um die NSScrollView und NSTableView einzurichten und ich kann keine Option finden, wo ich den Hintergrund des Scrollers deaktivieren kann. Irgendwelche Ideen, was das verursacht haben könnte?

Update: Einstellungen für meine NSScrollView in Xcode

Xcode http://f.cl.ly/items/2R0k1x0T1X0A160E3l2i/Screen%20Shot%202012-06-29%20at%2002.06.32.png

Antwort

2

Mein einziger Vorschlag ist, um sicherzustellen, dass Ihre NSScrollers der Standardstil sind, oder zu einer Klasse festlegen, die + (BOOL)isCompatibleWithOverlayScrollers überschreibt, wenn Sie ein verwenden benutzerdefinierte Scroller.

In IB, überprüfen Sie, dass "Default Style" unter "Scroller Knöpfe", zweite von oben ausgewählt ist.

enter image description here


OS X Lion eingeführt, um den neuen NSScrollers (Overlay scrollers) im Gegensatz zu den bisherigen Versionen in Snow Leopard und vor SL (legacy scrollers). Die Overlay-Scroller sind der Typ, der ein- und ausblendet und über den Inhalt ohne den grellen weißen Hintergrund gezeichnet wird.

In einigen Szenarien entscheidet sich Lion dafür, den Legacy-Scroller anstelle der neuen Overlay-Scroller zu verwenden (weil z. B. ein Zeigergerät ohne Scrollrad nicht exakt durch einen versteckten Overlay-Scroller scrollen kann)

The OS X 10.7 documentation erklärt es gut. Zusammenfassend prüfen Sie, ob a) der Benutzer Overlay-Scroller deaktiviert, b) ob Sie ein nicht unterstütztes Gerät angeschlossen haben, oder c) Sie NSScroller unterklassifizieren, zusätzliche Ansichten hinzufügen oder vergessen, + (BOOL)isCompatibleWithOverlayScrollers zu überschreiben.

Wenn Sie die älteren Scroller nicht sehen und nicht unterstützte Geräte unterstützen möchten (z. B. eine graue Bildlaufleiste über dem Inhalt, der nicht ein-/ausgeblendet wird), müssen Sie die Klasse NSScroller ableiten und sie benutzerdefiniert zeichnen. Anwendungen wie Twitter für Mac tun dies.

+0

Ich benutze keine benutzerdefinierten Scroller. Die Verwendung des Standardstils hat leider nichts geändert.Ich habe meinen Beitrag mit einem Bild meiner Einstellungen für NSScrollView aktualisiert. Ich weiß, dass es nicht immer so war. – iMaddin

+0

Bauen Sie für Snow Leopard oder ähnliches? – Vervious

+1

Es könnte auch schön sein, sicherzustellen, dass a) ein Benutzer nicht explizit festgelegt hat, keine Overlay-Scroller zu verwenden, b) dass eine Maus nicht verbunden ist und c) die Scroll-Ansicht keine Accessory Views hat. – Vervious

16

Überschreiben Sie NSScroller und gehen Sie folgendermaßen vor. Dies gibt Ihnen einen transparenten Hintergrund.

- (void) drawRect: (NSRect) dirtyRect 
{ 
    [self drawKnob]; 
} 
+0

Vielen Dank. Es funktionierte. :) – Sid

+0

danke eine Tonne !!! – user361526

+0

Darfst du das erweitern? Ich habe ein paar Antworten wie diese gesehen. Sicher, das Kopieren in mein Programm funktioniert nicht, ohne dass es von irgendwo aufgerufen wird? – maxisme

1

Für mich Ich habe meinen View-Controller dem Stellrad Stil wie eingestellt:

[_scrollView setScrollerStyle:NSScrollerStyleOverlay]; 

Dies machte die scrollers den transparenten Hintergrund haben.

-1

Wenn Sie wollen Transparenz in NSScrollView erreichen oder einfach einen klaren Hintergrund für Scroll-Ansicht wollen ... nur nutzen setDrawsBackground Eigentum von NSScrollView machen, d.h .:

[scrollView setDrawsBackground:NO]; 

hoffe, das hilft jemand. Danke :)

+1

Die Frage bezieht sich auf den Hintergrund des NSScroller, nicht des NSScrollerView. Ihre Antwort ändert nicht den Hintergrund des NSScroller. – Ely