滚动时NSTextView未正确刷新

时间:2009-05-11 19:27:23

标签: cocoa macos nstextview artifacts

我有一个NSTextView,其中包含大量文本。然而,每当我滚动时,视图都没有正确更新。有些工件保留在视图的顶部或底部。看来该视图不会经常刷新自己。如果我滚动得非常慢,视图会正确更新。如果我为视图添加边框一切都很完美,那么无边框视图就会出现问题。这是屏幕截图的链接:

由于

4 个答案:

答案 0 :(得分:6)

您是否为setDrawsBackgroundcopiesOnScroll设置了NSScrollViewNSClipView属性?

我建议的第一件事是关闭NSScrollView的“绘制背景”属性:

[myScrollView setDrawsBackground:NO];

请注意,这应该在嵌入式NSScrollView上的NSClipView上设置。

documentation的以下摘录可能是相关的:

  

如果NSScrollView附加NSClipViewsetDrawsBackground:发送参数NO的{​​{1}}消息,则会增加发送{NSScrollView的效果1}} NSClipView消息,参数为setCopiesOnScroll:。将NO消息直接发送到setDrawsBackground:的副作用是在滚动时文档视图中出现“trail”(前一个绘图的遗迹)。

答案 1 :(得分:2)

看起来文字字段甚至不在滚动区域中...你确定某些东西不重叠吗?

答案 2 :(得分:1)

我遇到了类似的问题 - 当NSTextView嵌入另一个滚动视图(即NSTableView)时,会产生工件。

我实际上在上设置了 setdrawsbackground,然后添加了一个漂亮的颜色让它再次消失。

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

这与scrollWheel事件结合使我可以在NSTableView中使用NSTextView。

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

答案 3 :(得分:0)

前段时间我遇到了同样的麻烦。我不记得我是怎么解决的。

如果superview是自定义视图,请尝试将NSTextView放置到另一个视图。只是看看会发生什么。