NSTextView не обновляется должным образом при прокрутке
-
21-08-2019 - |
Вопрос
У меня есть NSTextView с большим количеством текста.Однако всякий раз, когда я прокручиваю, представление не обновляется должным образом.Некоторые артефакты остаются вверху или внизу изображения.Похоже, что представление обновляется недостаточно часто.Если я прокручиваю очень медленно, представление обновляется правильно.Если я добавляю рамку к представлению, все работает отлично, а в представлении без полей возникает проблема.Вот ссылка на скриншот:
Спасибо
Решение
Вы установили setDrawsBackground
и copiesOnScroll
свойства для любого NSScrollView
или NSClipView
?
Первое, что я бы посоветовал, это отключить свойство «рисовать фон» NSScrollView
:
[myScrollView setDrawsBackground:NO];
Обратите внимание, что это должно быть установлено на NSScrollView
, и нет на встроенном NSClipView
.
Следующий отрывок из документация может быть актуально:
Если ваш
NSScrollView
включаетNSClipView
отправкаsetDrawsBackground:
сообщение с параметромNO
кNSScrollView
имеет дополнительный эффект отправкиNSClipView
аsetCopiesOnScroll:
сообщение с параметромNO
.Побочный эффект от отправкиsetDrawsBackground:
сообщение непосредственно вNSClipView
вместо этого будет появление «следов» (остатков предыдущего рисунка) в представлении документа при его прокрутке.
Другие советы
Похоже, текстовое поле даже не находится в области прокрутки...Вы уверены, что что-то не перекрывается?
У меня была аналогичная проблема — артефакты возникают, когда 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];
}
У меня была такая же беда некоторое время назад.Я не помню, как я это решил.
Попробуйте поместить NSTextView в другое представление, если суперпредставление является пользовательским представлением.Просто чтобы посмотреть, что произойдет.