NSTextView не обновляется должным образом при прокрутке - PullRequest
6 голосов
/ 11 мая 2009

У меня есть NSTextView с большим количеством текста. Однако, когда я прокручиваю, представление не обновляется должным образом. Есть некоторые артефакты, которые остаются в верхней или нижней части вида. Похоже, что вид обновляется не достаточно часто. Если я прокручиваю очень медленно, вид обновляется правильно, хотя. Если я добавляю границу к виду, все работает отлично, проблема с видом без границ. Вот ссылка на скриншот:

Спасибо

Ответы [ 4 ]

6 голосов
/ 28 мая 2009

Вы установили свойства setDrawsBackground и copiesOnScroll для NSScrollView или NSClipView?

Первое, что я хотел бы предложить, это отключить свойство "draws background" NSScrollView:

[myScrollView setDrawsBackground:NO];

Обратите внимание, что это должно быть установлено на NSScrollView, а не на встроенном NSClipView.

Следующая выдержка из документации может иметь отношение:

Если ваш NSScrollView содержит NSClipView, отправив сообщение setDrawsBackground: с параметром NO на NSScrollView, добавляется эффект отправки сообщения NSClipView a setCopiesOnScroll: с параметром NO. Побочным эффектом отправки сообщения setDrawsBackground: непосредственно на NSClipView вместо этого будет появление «следов» (остатков предыдущего чертежа) в виде документа при его прокрутке.

2 голосов
/ 24 мая 2009

Похоже, что текстовое поле даже не находится в области прокрутки ... Вы уверены, что что-то не перекрывает его?

1 голос
/ 07 января 2015

У меня была похожая проблема - артефакты развиваются, когда NSTextView встроен в другое представление прокрутки (т.е. NSTableView).

Я фактически включил на setdrawsbackground, а затем добавил красивый цвет, чтобы он снова исчез.

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

Это в сочетании с событием scrollWheel позволяет мне использовать NSTextView в NSTableView.

-(void)scrollWheel:(NSEvent *)theEvent{
    NSScrollView *scroll = [self enclosingScrollView];
   [[scroll superview] scrollWheel:theEvent];
}
0 голосов
/ 26 мая 2009

У меня была такая же проблема некоторое время назад. Я не помню, как я это решил.

Попробуйте поместить NSTextView в другое представление, если суперпредставление является пользовательским представлением. Просто чтобы посмотреть, что будет.

...