NSTextView nicht richtig aktualisiert am Scrollen
-
21-08-2019 - |
Frage
Ich habe eine NSTextView mit einer beträchtlichen Menge an Text. Jedes Mal, wenn ich jedoch bewegen, wird die Ansicht nicht korrekt aktualisiert. Es gibt einige Artefakte, die am oberen oder unteren Rand der Ansicht bleiben. Es scheint, dass die Ansicht nicht aktualisiert sich oft genug. Wenn ich nur sehr langsam die Ansicht blättern aktualisiert obwohl korrekt. Wenn ich eine Grenze zu der Ansicht, alles perfekt funktioniert hinzufügen, randlos Ansicht ist derjenige, der ein Problem hat. Hier ist ein Link zu einem Screenshot:
Danke
Lösung
Haben Sie den setDrawsBackground
und copiesOnScroll
propertes entweder für die NSScrollView
oder NSClipView
?
Das erste, was ich vorschlagen würde, ist die „zieht Hintergrund“ Eigenschaft der NSScrollView
Ausschalten:
[myScrollView setDrawsBackground:NO];
Beachten Sie, dass dies auf dem NSScrollView
eingestellt wird, und nicht auf dem eingebetteten NSClipView
.
Der folgende Auszug aus dem Dokumentation relevant sein können:
Wenn Ihr
NSScrollView
eineNSClipView
umschließt einesetDrawsBackground:
Nachricht mit einem Parameter vonNO
zumNSScrollView
Senden hat den zusätzlichen Effekt, dieNSClipView
einesetCopiesOnScroll:
Nachricht mit einem Parameter vonNO
senden. Der Nebeneffekt dersetDrawsBackground:
Nachricht direkt an dieNSClipView
sendet stattdessen das Auftreten von „Pfade“ (Spuren der vorherigen Zeichnung) wäre in der Dokumentenansicht, wie sie gescrollt wird.
Andere Tipps
Sieht aus wie das Textfeld nicht einmal in dem Scroll-Bereich ist ... Sind Sie sicher, dass etwas nicht wahr überlappende?
Ich hatte ein ähnliches Problem - Artefakte entwickeln, wenn die NSTextView in einem anderen Scroll eingebettet ist
(dh eine NSTableView.).I tatsächlich eingeschaltet die setdrawsbackground und fügte dann eine schöne Farbe, um es wieder verschwinden.
-(void)awakeFromNib{
NSScrollView *scroll = [self enclosingScrollView];
[scroll setBorderType:NSNoBorder];
[scroll setDrawsBackground:YES];
[scroll setBackgroundColor:[NSColor windowBackgroundColor]];
}
Dies in Kombination mit einem Scroll-Rad-Ereignisse lassen Sie mich die NSTextView in einem NSTableView verwenden.
-(void)scrollWheel:(NSEvent *)theEvent{
NSScrollView *scroll = [self enclosingScrollView];
[[scroll superview] scrollWheel:theEvent];
}
Ich hatte das gleiche Problem vor einiger Zeit. Ich erinnere mich nicht, wie ich es gelöst.
Versuchen Sie, die NSTextView zu einer anderen Ansicht zu sperren, wenn die Superview eine benutzerdefinierte Ansicht ist. Nur um zu sehen, was passieren wird.