2010-08-24 8 views
6

Cargué la vista web y configuré allowScrolling en NO, pero la vista web aún muestra barras de desplazamiento ... Golpear la cabeza en la computadora duele mucho más ahora que las MacBooks tienen bordes metálicos afilados.Las barras de desplazamiento Cocoa WebView no desaparecerán

Mi código:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // Insert code here to initialize your application 
    NSString *webFolder = @"file:///<WebFolderPath>"; 
    [[[productWeb mainFrame] frameView] setAllowsScrolling:NO]; 
    [productWeb setFrameLoadDelegate:self]; 
    [[productWeb mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[webFolder stringByAppendingString:@"webpage.html"]]]]; 
} 

siquiera puedo configurar el delegado carga del marco para informar sobre el estado de desplazamiento:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame 
{ 
    NSLog(@"Scrolling %@",[[frame frameView] allowsScrolling] ? @"Allowed" : @"Not Allowed"); 
    [[frame frameView] setAllowsScrolling:NO]; 
    NSLog(@"Scrolling %@",[[frame frameView] allowsScrolling] ? @"Allowed" : @"Not Allowed"); 
} 

que todavía me da la infeliz:

2010-08-24 15:20:09.102 myApp[30437:a0f] Scrolling Allowed 
2010-08-24 15:20:09.104 myApp[30437:a0f] Scrolling Not Allowed 

Y sin embargo, las barras de desplazamiento continúan mostrando! Con suerte, es algo estúpido que estoy haciendo ya que no quiero tener más sangre en mi computadora portátil.

Respuesta

1

Encontré que tenía que editar el HTML de la página que estaba tratando de mostrar para asegurarme de que estaba configurado para tomar la pantalla completa (y no más) ... había un DIV que tenía un ancho mínimo establecido . Una vez que me aseguré de que el cuerpo tuviera una altura = 100% y que ninguna de las DIV tuviera un conjunto de ancho mínimo o fijo que fuera más pequeño, la caja que quería mostrar en todo se combinó :)

0

¿Está tratando de evitar que el usuario se desplace por la vista? Usted puede simplemente configurar productWeb.userInteractionEnabled = NO. ¿O solo está tratando de evitar que las barras se muestren cuando el usuario está desplazándose?

Aquí es otra cosa que puede probar: inyectar algo de JavaScript en su UIWebView que deshabilita el evento touchmove:

[productWeb stringByEvaluatingJavaScriptFromString:@"document.ontouchmove = function(e){e.preventDefault();}"]; 

Esto deja a la interacción con el usuario habilitado, pero debería evitar cualquier desplazamiento.

+0

Creo que esto es OS X, sin embargo, no iOS ... – Wevah

+0

Ah, buen punto - Debo tener iPhone en el cerebro. – Don

+0

Sí, parece que el marco de iPhone ha recibido mucha más atención últimamente.Hay muchas características que me gustaría ver traídas al núcleo de cacao. – BadPirate

-1

Supongo que su la vista web está en una plumilla que se está cargando antes de llamar al-applicationDidFinishLaunching:.

Una solución rápida:

  1. en su punta, seleccione la ventana y desactive la opción "Visible en el lanzamiento" atributo.
  2. Luego, después de llamar al -setAllowsScrolling:, llame al -[self.window makeKeyAndOrderFront:nil] para mostrar la ventana.

Una mejor solución es mover el código de carga de la ventana delegado de la aplicación a un controlador subclase ventana, hacer la llamada a -setAllowsScrolling: en -[NSWindowController windowDidLoad], y llamar a -[NSWindowController showWindow:] del delegado de la aplicación para mostrar la ventana.

+0

Esto no es todo, la aplicaciónDidFinishLaunching ocurre después de que se carga el plumín y su NSLog muestra claramente que el objeto existe. –

0

Prueba este si utiliza Swift:

import Foundation 
import Cocoa 
import WebKit 


class WebViewRep: WebView { 

    //... hidden code 

    required init?(coder: NSCoder) { 
     super.init(coder: coder) 
     //Disable scrolling 
     self.mainFrame.frameView.allowsScrolling = false 
     //Sets current object as the receiver of delegates 
     self.policyDelegate = self 
     self.frameLoadDelegate = self 
     //Load homepage 
     self.loadHomePage() 
    } 

    //... hidden code 

    override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) { 
     //Completely disable scroll 
     frame.frameView.allowsScrolling = false 
     self.stringByEvaluatingJavaScriptFromString("document.documentElement.style.overflow = 'hidden';") 
    } 

} 

Por desgracia, no es suficiente para el uso allowScrolling. A veces funciona, pero no siempre. Entonces, debes manipular la página cargada también.

Por supuesto, no olvide configurar WebViewRep como clase personalizada para su WebView.

Cuestiones relacionadas