2010-08-24 3 views
6

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

Мой код:

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

И но полоски прокрутки продолжают показывать! Надеюсь, это что-то глупое, что я делаю, потому что не хочу, чтобы на моем ноутбуке была больше крови.

ответ

1

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

0

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

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

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

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

+0

Я думаю, что это OS X, хотя и не iOS ... – Wevah

+0

А, хороший момент - у меня должен быть iPhone на мозге. – Don

+0

Да, похоже, что в iPhone в последнее время уделяется гораздо больше внимания.Есть много особенностей, которые я бы хотел увидеть, перенесенных в основное какао. – BadPirate

-1

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

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

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

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

+0

Это не так, appliactionDidFinishLaunching происходит после нагрузок nib, и его NSLog ясно показывает, что объект существует. –

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.

Смежные вопросы