2010-08-24 8 views
6

ich die Webansicht laden und setzen allowsScrolling auf NO, aber Webansicht zeigt noch Scrollbalken ... Banging Kopf auf Ihrem Computer tut sehr weh mehr jetzt, dass MacBooks scharfen Metallkanten haben.Cocoa WebView Bildlaufleisten werden nicht verschwinden

Mein Code:

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

I Setup auch der Rahmen Lade Delegat über die Scroll-Status zu berichten:

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

Welche gibt mir immer noch die unglückliche:

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 

Und doch die scrollbars zeigen weiter! Hoffentlich ist es etwas Dummes, das ich mache, weil ich kein Blut mehr auf meinem Laptop haben will.

Antwort

1

Ich fand ich den HTML-Code der Seite zu bearbeiten hatte ich versuchte, um sicherzustellen, anzuzeigen, dass es Setup war das Vollbild zu nehmen (und nicht mehr) ... gab es ein DIV, die eine minimale Breite Satz hatte . Sobald ich sicherstellte, dass der Körper Höhe = 100% hatte und dass keiner der DIVs eine feste oder minimale Breite hatte, die kleiner als die Box war, die ich in allem zeigen wollte, kam zusammen :)

0

Versuchen Sie, an alle Benutzer von Scrollen der Ansicht zu verhindern? Sie können einfach einstellen. Oder möchten Sie nur verhindern, dass die Balken angezeigt werden, wenn der Benutzer scrollt?

Hier ist eine andere Sache, die Sie ausprobieren können: einige JavaScript in Ihrem UIWebView injizieren, die das Ereignis deaktiviert Berührungsbewegungs:

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

Dies lässt die Interaktion mit dem Benutzer aktiviert, sollte aber jede Scrollen verhindern.

+0

Ich denke, das ist OS X, aber nicht iOS ... – Wevah

+0

Ah, guter Punkt - ich iPhone auf das Gehirn haben. – Don

+0

Ja, es scheint, dass das iPhone-Framework in letzter Zeit viel mehr Aufmerksamkeit bekommen hat.Es gibt viele Features, die ich gerne zum Kernkakao bringen würde. – BadPirate

-1

Ich schätze deine Web-Ansicht ist in einer Feder, die geladen wird vor-applicationDidFinishLaunching: heißt.

Eine schnelle Lösung:

  1. In Ihrer Feder, um das Fenster auswählen und das Attribut "an der Abschuss Visible" abzuwählen.
  2. Dann, nachdem Sie -setAllowsScrolling: rufen, rufen -[self.window makeKeyAndOrderFront:nil] das Fenster zu zeigen.

Eine bessere Lösung ist Ihr Fenster Ladecode aus dem AppDelegate zu einem Fenster Controller Unterklasse, machen den Anruf zu -setAllowsScrolling: in -[NSWindowController windowDidLoad], sich zu bewegen und -[NSWindowController showWindow:] von AppDelegate rufen Sie das Fenster anzuzeigen.

+0

Dies ist es nicht, appliactionDidFinishLaunching passiert, nachdem die Spitze geladen und seine NSLog deutlich zeigt, dass das Objekt existiert. –

0

Versuchen Sie diese, wenn Sie verwenden 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';") 
    } 

} 

Leider reicht es nicht allowScrolling zu verwenden. Es funktioniert manchmal, aber nicht immer. Also, Sie müssen auch die geladene Seite manipulieren.

Natürlich vergessen Sie nicht WebViewRep als benutzerdefinierte Klasse für Ihren WebView einzustellen.

Verwandte Themen