Cocoa WebView滚动条不会消失

时间:2010-08-24 22:29:53

标签: cocoa webview scroll

我加载了webview并将allowsScrolling设置为NO,但是webview仍然显示滚动条...现在MacBooks有锋利的金属边缘,在你的计算机上敲打你的头很多。

我的代码:

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

我甚至设置帧加载委托来报告滚动状态:

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

这仍然让我感到不快:

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

然而滚动条继续显示!希望这是我做的蠢事,因为我不想在笔记本电脑上再吸血。

4 个答案:

答案 0 :(得分:1)

我发现我必须编辑我试图显示的页面的HTML,以确保它设置为全屏(而不是更多)...有一个DIV设置了最小宽度。一旦我确定身体的高度= 100%并且DIV没有一个固定的或最小的宽度设置小于那个我希望在所有东西中显示它的盒子:)

答案 1 :(得分:0)

您是否试图阻止用户滚动视图?您只需设置productWeb.userInteractionEnabled = NO即可。或者您只是想在用户滚动时阻止显示条形图?

这是你可以尝试的另一件事:在你的UIWebView中注入一些禁用touchmove事件的JavaScript:

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

这会启用用户交互,但应阻止任何滚动。

答案 2 :(得分:0)

如果你使用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';")
    }

}

可悲的是,使用allowScrolling还不够。它有时有效,但并非总是如此。所以,你也必须操纵加载的页面。

当然,不要忘记将WebViewRep设置为WebView的自定义类。

答案 3 :(得分:-1)

我猜你的网页视图是在 -applicationDidFinishLaunching:被调用之前加载的笔尖。

快速修复:

  1. 在您的笔尖中,选择窗口并取消选中“在启动时可见”属性。
  2. 然后在致电-setAllowsScrolling:后,请致电-[self.window makeKeyAndOrderFront:nil]以显示该窗口。
  3. 更好的解决方法是将窗口加载代码从app委托转移到窗口控制器子类,在-setAllowsScrolling:中调用-[NSWindowController windowDidLoad],然后从应用委托中调用-[NSWindowController showWindow:]显示窗口。