2010-08-24 20 views
6

Carico la visualizzazione Web e imposta allowScrolling su NO, ma la webview mostra ancora le barre di scorrimento ... Scuotere la testa sul tuo computer fa molto più male ora che i MacBook hanno bordi metallici affilati.Le barre di scorrimento di Cocoa WebView non scompariranno

Il mio codice:

- (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"]]]]; 
} 

Ho anche impostare il delegato telaio di carico per segnalare sullo stato di scorrimento:

- (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"); 
} 

che ancora mi dà l'infelice:

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 

E eppure le barre di scorrimento continuano a mostrare! Spero che sia qualcosa di stupido che sto facendo perché non voglio più avere sangue sul mio portatile.

risposta

1

Ho trovato che dovevo modificare l'HTML della pagina che stavo cercando di visualizzare per assicurarmi che fosse impostato per prendere lo schermo intero (e non di più) ... c'era un DIV con una larghezza minima impostata . Una volta assicurato che il corpo avesse altezza = 100% e nessuno dei DIV avesse un set di larghezza fisso o minimo più piccolo della scatola che volevo mostrare in tutto ciò che veniva insieme :)

0

Stai tentando di impedire all'utente di scorrere la visualizzazione? Puoi semplicemente impostare productWeb.userInteractionEnabled = NO. O stai solo cercando di impedire che le barre vengano visualizzate quando l'utente sta scorrendo?

Ecco un'altra cosa che puoi provare: iniettare un po 'di JavaScript nel vostro UIWebView che disabilita l'evento touchmove:

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

Questo lascia l'interazione con l'utente abilitato, ma dovrebbe evitare lo scorrimento.

+0

Penso che questo sia OS X, però, non iOS ... – Wevah

+0

Ah, buon punto - Devo avere iPhone sul cervello. – Don

+0

Sì, sembra che il framework per iPhone abbia ricevuto molta più attenzione ultimamente.Ci sono molte funzionalità che mi piacerebbe vedere portate al cacao centrale. – BadPirate

-1

Sto immaginando il tuo la vista Web è in un pennino che viene caricato prima dello-applicationDidFinishLaunching:.

una soluzione rapida:

  1. Nel vostro pennino, selezionare la finestra e deselezionare "Visibile al momento del lancio" attributo.
  2. Quindi dopo aver chiamato -setAllowsScrolling:, chiamare -[self.window makeKeyAndOrderFront:nil] per visualizzare la finestra.

una correzione migliore è quello di spostare il codice di caricamento finestra dal delegato app per un controller sottoclasse finestra, fare la chiamata a -setAllowsScrolling: in -[NSWindowController windowDidLoad], e chiamare -[NSWindowController showWindow:] dalla tua app delegato per visualizzare la finestra.

+0

Questo non è vero, appliactionDidFinishLaunching si verifica dopo il caricamento del pennino e il suo NSLog mostra chiaramente che l'oggetto esiste. –

0

Prova questo se si utilizza 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';") 
    } 

} 

Purtroppo, non è sufficiente utilizzare allowScrolling. Funziona a volte, ma non sempre. Quindi, devi anche manipolare la pagina caricata.

Ovviamente, non dimenticare di impostare WebViewRep come classe personalizzata per la tua WebView.

Problemi correlati