Question

I have a NSTextView with a sizeable quantity of text. Whenever I scroll however, the view isn't updated properly. There are some artifacts that remain at the top or the bottom of the view. It appears that the view doesn't refresh itself often enough. If I scroll very slowly the view updates correctly though. If I add a border to the view everything works perfectly, borderless view is the one that has a problem. Here's a link to a screenshot:

Thanks

Was it helpful?

Solution

Have you set the setDrawsBackground and copiesOnScroll propertes for either the NSScrollView or the NSClipView?

The first thing I would suggest is turning off the "draws background" property of the NSScrollView:

[myScrollView setDrawsBackground:NO];

Note that this should be set on the NSScrollView, and not on the embedded NSClipView.

The following excerpt from the documentation may be relevant:

If your NSScrollView encloses an NSClipView sending a setDrawsBackground: message with a parameter of NO to the NSScrollView has the added effect of sending the NSClipView a setCopiesOnScroll: message with a parameter of NO. The side effect of sending the setDrawsBackground: message directly to the NSClipView instead would be the appearance of “trails” (vestiges of previous drawing) in the document view as it is scrolled.

OTHER TIPS

Looks like the text field isn't even in the scrolling-area... Are you sure something isnt overlapping it?

I had a similar trouble - artifacts develop when the NSTextView is embedded in another scrollview (ie. a NSTableView).

I actually turned on the setdrawsbackground, and then added a nice color to make it disappear again.

-(void)awakeFromNib{
    NSScrollView *scroll = [self enclosingScrollView];
    [scroll setBorderType:NSNoBorder];
    [scroll setDrawsBackground:YES];
    [scroll setBackgroundColor:[NSColor windowBackgroundColor]];
}

This in combination with a scrollWheel event let me use the NSTextView in a NSTableView.

-(void)scrollWheel:(NSEvent *)theEvent{
    NSScrollView *scroll = [self enclosingScrollView];
   [[scroll superview] scrollWheel:theEvent];
}

I had the same trouble some time ago. I don't remember how I solved it.

Try to place the NSTextView to another view if the superview is a custom view. Just to see what will happen.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top