1

コンテンツに合わせて WebView 要素のサイズを変更するのに問題があります。コンテンツのサイズを変更したくありません。WebView とそれに含まれるカスタム ビューと NSWindow をコンテンツに合わせてサイズ変更します。

現時点では、JavaScript を使用して幅と高さを取得し、3 つの要素のサイズを変更しようとしましたが、NSRect と setFrameSize を使用しましたが、うまくいきませんでした (以下を参照)。

基本的に、Web ビューを含むカスタム ビューを含む NSWindow がある場合、WebView のコンテンツに合わせてサイズを変更するにはどうすればよいですか?

よろしくお願いします!

これは私が現在持っているもので、大きな混乱を引き起こしています (メインウィンドウのサイズを変更せず、ウィンドウの内容がこぼれます)。

NSString *width = [_myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"];
NSString *height = [_myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

NSSize size;
size.width = [width floatValue];
size.height = [height floatValue];

NSRect mySize = NSMakeRect(_window.frame.origin.x, _window.frame.origin.y, size.width, size.height);
[_window setFrame:mySize display:YES]; // Resize main NSWindow
[_webViewView setFrameSize:size]; // Resize custom view of main NSWindow
[_myWebView setFrameSize:size]; // Resize WebView in custom view
4

1 に答える 1

4

私の知る限り、カスタム ビューを含むウィンドウがあり、それ自体に Web ビューが含まれています。

コンテンツを Web ビューにロードし、そのコンテンツに合わせて Web ビューのフレームのサイズを変更したいと考えています。それに応じて、含まれているビューとウィンドウのサイズも変更する必要があります。

この他の質問への回答で説明したように、コンテンツに応じて Web ビューのサイズを変更する方法を理解したら、それに応じてコンテナーのサイズを簡単に変更できます。

含まれているオブジェクトのサイズを変更する追加を加えて、ここで私の答えを繰り返します。

他の回答で述べたように、コンテンツがどのくらいの大きさになるかを事前に知ることはできず、多くの Web サイトは大きすぎて画面に収まりません。これを有効にするには、ウィンドウの高さを画面の高さに制限する必要があるでしょう。

- (void)loadWebPage
{
    //set ourselves as the frame load delegate so we know when the window loads
    [webView setFrameLoadDelegate:self];

    //turn off scrollbars in the frame
    [[[webView mainFrame] frameView] setAllowsScrolling:NO];

    //load the page
    NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://daringfireball.net"]];
    [[webView mainFrame] loadRequest:request];
}

//called when the frame finishes loading
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)webFrame
{
    if([webFrame isEqual:[webView mainFrame]])
    {
        //get the rect for the rendered frame
        NSRect webFrameRect = [[[webFrame frameView] documentView] frame];
        //get the rect of the current webview
        NSRect webViewRect = [webView frame];

        //calculate the difference from the old frame to the new frame
        CGFloat deltaX = NSWidth(webFrameRect) - NSWidth(webViewRect);
        CGFloat deltaY = NSHeight(webFrameRect) - NSHeight(webViewRect);

        //make sure our web view and its superview resize automatically when the 
        //window resizes
        [webView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
        [[webView superview] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];


        //set the window's frame, adjusted by our deltas

        //you should probably add some code to constrain the size of the window
        //to the screen's content size
        NSRect windowFrame = window.frame;
        [webView setFrameSize:NSMakeSize(NSWidth(window.frame) + deltaX, NSHeight(window.frame) + deltaY)];

        //turn scroll bars back on
        [[[webView mainFrame] frameView] setAllowsScrolling:YES];
    }
}
于 2012-04-24T22:47:13.113 に答える