Полосы прокрутки Cocoa WebView не исчезнут - PullRequest
6 голосов
/ 25 августа 2010

Я загружаю веб-просмотр и устанавливаю для параметра разрешенной прокрутки значение НЕТ, но в веб-просмотре по-прежнему отображаются полосы прокрутки ... Удар головой о компьютер сильно больно теперь, когда у MacBook есть острые металлические края.

Мой код:

- (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 ]

1 голос
/ 26 августа 2010

Я обнаружил, что мне нужно было отредактировать HTML-код страницы, которую я пытался отобразить, чтобы убедиться, что он настроен на работу в полноэкранном режиме (и не более) ... был DIV, для которого была установлена ​​минимальная ширина.Как только я удостоверился, что тело имеет высоту = 100%, и что ни у одного из DIV нет фиксированного или минимального набора ширины, который был бы меньше, чем поле, которое я хотел показать во всем, собрались вместе:)

0 голосов
/ 10 декабря 2014

Попробуйте, если вы используете 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.

0 голосов
/ 20 октября 2012

Полагаю, ваше веб-представление находится в перо, которое загружается до вызова -applicationDidFinishLaunching:.

Быстрое исправление:

  1. В своем кончике выберите окно и отмените выбор атрибута «Видимый при запуске».
  2. Затем, после того как вы позвоните -setAllowsScrolling:, позвоните -[self.window makeKeyAndOrderFront:nil], чтобы открыть окно.

Лучшее решение - переместить код загрузки окна из делегата приложения в подкласс контроллера окна, выполнить вызов -setAllowsScrolling: в -[NSWindowController windowDidLoad] и вызвать -[NSWindowController showWindow:] из делегата приложения, чтобы показать окно.

0 голосов
/ 25 августа 2010

Вы пытаетесь запретить пользователю прокручивать представление вообще? Вы можете просто установить productWeb.userInteractionEnabled = NO. Или вы просто пытаетесь запретить отображение полос при прокрутке пользователя?

Вот еще одна вещь, которую вы можете попробовать: внедрить JavaScript в UIWebView, который отключает событие touchmove:

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

Это оставляет взаимодействие с пользователем включенным, но должно предотвратить любую прокрутку.

...