2010-08-24 55 views
6

Tôi tải chế độ xem web và đặt allowScrolling thành NO, nhưng chế độ xem web vẫn hiển thị thanh cuộn ... Đập đầu trên máy tính của bạn đau hơn nhiều so với MacBook có cạnh kim loại sắc nét.Thanh cuộn WebView của Cocoa sẽ không biến mất

Mã của tôi:

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

Tôi thậm chí thiết lập các đại biểu khung tải báo cáo về tình trạng di chuyển:

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

nào vẫn mang lại cho tôi sự hài lòng:

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 

Và nhưng thanh cuộn vẫn tiếp tục hiển thị! Hy vọng rằng, nó là một cái gì đó ngu ngốc tôi đang làm như tôi không muốn để có được thêm máu trên máy tính xách tay của tôi.

Trả lời

1

Tôi thấy rằng tôi phải chỉnh sửa HTML của trang mà tôi đang cố gắng hiển thị để đảm bảo rằng trang đã được thiết lập để chụp toàn màn hình (và không nhiều hơn nữa) ... có một DIV có độ rộng tối thiểu được đặt . Khi tôi đã chắc chắn rằng cơ thể có chiều cao = 100% và không có bộ phận nào của DIV có bộ chiều rộng cố định hoặc tối thiểu nhỏ hơn thì hộp tôi muốn hiển thị trong mọi thứ được ghép lại với nhau :)

0

Bạn có đang cố gắng ngăn người dùng cuộn chế độ xem không? Bạn chỉ có thể đặt productWeb.userInteractionEnabled = NO. Hay bạn chỉ đang cố ngăn chặn các thanh hiển thị khi người dùng đang cuộn?

Dưới đây là một điều bạn có thể thử: tiêm một số JavaScript vào UIWebView của bạn mà vô hiệu hóa các sự kiện touchmove:

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

này rời khỏi tương tác người dùng kích hoạt, nhưng nên ngăn chặn bất kỳ cuộn.

+0

Tôi nghĩ rằng đây là OS X, tuy nhiên, không phải iOS ... – Wevah

+0

Ah, tốt điểm - Tôi phải có iPhone trên não. – Don

+0

Vâng, có vẻ như khuôn khổ iPhone đã nhận được sự chú ý nhiều hơn gần đây.Có rất nhiều tính năng mà tôi rất muốn thấy khi chuyển sang ca cao cốt lõi. – BadPirate

-1

Tôi đoán chế độ xem web nằm trong một ngườ đang được tải trước khi gọi-applicationDidFinishLaunching:.

Khắc phục nhanh:

  1. Trong nib của bạn, chọn cửa sổ và bỏ chọn "Visible tại Launch" thuộc tính.
  2. Sau đó, sau khi bạn gọi -setAllowsScrolling:, hãy gọi -[self.window makeKeyAndOrderFront:nil] để hiển thị cửa sổ.

Một sửa chữa tốt hơn là để di chuyển mã tải cửa sổ của bạn từ các đại biểu ứng dụng một cửa sổ điều khiển lớp con, thực hiện cuộc gọi đến -setAllowsScrolling: trong -[NSWindowController windowDidLoad], và gọi -[NSWindowController showWindow:] từ đại biểu ứng dụng của bạn để hiển thị cửa sổ.

+0

Đây không phải là nó, appliactionDidFinishLaunching xảy ra sau khi tải nib và NSLog của mình rõ ràng cho thấy rằng đối tượng không tồn tại. –

0

Hãy thử điều này nếu bạn sử dụng 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';") 
    } 

} 

Đáng buồn thay, nó không đủ để sử dụng allowScrolling. Nó hoạt động đôi khi, nhưng không phải lúc nào. Vì vậy, bạn phải thao tác tải trang quá.

Tất nhiên, đừng quên đặt WebViewRep làm lớp tùy chỉnh cho WebView của bạn.

Các vấn đề liên quan