NSTextView no se actualiza correctamente al desplazarse
-
21-08-2019 - |
Pregunta
Tengo un NSTextView con una cantidad considerable de texto.Sin embargo, cada vez que me desplazo, la vista no se actualiza correctamente.Hay algunos artefactos que permanecen en la parte superior o inferior de la vista.Parece que la vista no se actualiza con la suficiente frecuencia.Sin embargo, si me desplazo muy lentamente, la vista se actualiza correctamente.Si agrego un borde a la vista todo funciona perfectamente, la vista sin bordes es la que tiene un problema.Aquí hay un enlace a una captura de pantalla:
Gracias
Solución
¿Has configurado el setDrawsBackground
y copiesOnScroll
propiedades para el NSScrollView
o el NSClipView
?
Lo primero que sugeriría es desactivar la propiedad "fondo de dibujo" del NSScrollView
:
[myScrollView setDrawsBackground:NO];
Tenga en cuenta que esto debe configurarse en el NSScrollView
, y no en el incrustado NSClipView
.
El siguiente extracto del documentación puede ser relevante:
Si tu
NSScrollView
encierra unNSClipView
enviando unsetDrawsBackground:
mensaje con un parámetro deNO
haciaNSScrollView
tiene el efecto añadido de enviar elNSClipView
asetCopiesOnScroll:
mensaje con un parámetro deNO
.El efecto secundario de enviar elsetDrawsBackground:
mensaje directamente alNSClipView
en cambio, sería la aparición de “senderos” (vestigios de un dibujo anterior) en la vista del documento a medida que se desplaza.
Otros consejos
Parece que el campo de texto ni siquiera está en el área de desplazamiento ... ¿Estás seguro de que algo isnt la superposición de él?
I tenía un problema parecido - artefactos se desarrollan cuando la NSTextView está incrustado en otro ScrollView
(es decir, un NSTableView.).De hecho, me di en el setdrawsbackground, y luego añadió un bonito color para hacerla desaparecer de nuevo.
-(void)awakeFromNib{
NSScrollView *scroll = [self enclosingScrollView];
[scroll setBorderType:NSNoBorder];
[scroll setDrawsBackground:YES];
[scroll setBackgroundColor:[NSColor windowBackgroundColor]];
}
Esto, en combinación con un evento scrollwheel me dejó usar el NSTextView en un NSTableView.
-(void)scrollWheel:(NSEvent *)theEvent{
NSScrollView *scroll = [self enclosingScrollView];
[[scroll superview] scrollWheel:theEvent];
}
Yo tenía el mismo problema hace algún tiempo. No recuerdo cómo lo resolví.
Trate de colocar el NSTextView a otra vista si el supervista es una vista personalizada. Sólo para ver qué va a pasar.