2010-02-02 5 views

답변

11

당신은 예를 들어, 크기를 조정할 개별 프레임의 문서보기에 -scaleUnitSquareToSize:를 호출하는 메인 프레임이 필요합니다 Javascript가 가장 친한 친구입니다.

[_webview stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.zoom = \"0.5\""]; 
+1

이렇게하면 @Wanderer가 확인한 답변에 대한 댓글처럼 1/1.5 (즉, 2/3)의보기 경계에서 오른쪽에 콘텐츠가 잘립니다. documentView의 수퍼 뷰를 확장해도 마우스 포인터가 올바르게 작동하지 않기 때문에 (다른 답변의 주석에도 설명되어 있음) 중 하나도 작동하지 않습니다. 그래서, 여기에 대한 대답은 나에게 지금까지는 (10.10.5에서) 작동하지 않습니다. –

+0

또한보십시오 : http://stackoverflow.com/questions/23010634/zooming-in-and-out-in-webview-cocoa –

-2

WebView는 NSView이므로 한 가지 방법은 to send it a scaleUnitSquareToSize: message입니다.

- (IBAction)takeZoom:(NSSlider *)sender { 
    WebView *aWebView = [[window.contentView subviews] lastObject]; 
    NSView *clipView = [[[[aWebView mainFrame] frameView] documentView] superview]; 
    float scale = pow(4, [sender floatValue])/(clipView.frame.size.width/clipView.bounds.size.width); 
    [clipView scaleUnitSquareToSize:NSMakeSize(scale, scale)]; 
    [clipView setNeedsDisplay:YES]; 
} 
+0

WebView는 실제로 매우 복잡한 관리 그룹이므로 네스트 된 뷰가 있다면, 실제로'-scaleUnitSquareToSize :'를'WebView' 객체에서 호출 할 수 없습니다. –

5

또는 당신이 다음을 시도 할 수 있습니다 :

+0

이렇게하려면 클립보기의 배율이 올바른 방법 인 것으로 보입니다. 너무 열심히 치는 데 너무 피곤하지만 위의 Rob의 제안은 규모가되지만 잎은 스크롤 내용 영역을 확대하므로 크기 조정 된 페이지를 얻을 수 있지만 웹보기의 오른쪽에있는 깨진 픽셀의 '유물 놀이터' . 나는 방금 위의 루틴 중 2,4,5 행을 꺼냈다. 내 보고서보기는 대화 상자 패널의 웹보기로 조정됩니다. 고마워 방랑자! –

+2

이것은 저에게 아주 좋습니다! 허용 된 대답이 부적절하게 잘릴 수 있습니다. – Wevah

+0

두 가지 모두 문서 뷰의 수퍼 뷰를 확장하여 완벽하게 크기를 조정할 수 있습니다. 오른쪽 및 잘못된 리플 로우에 클리핑이 나타납니다. 사용자 컨트롤에 따라 확대/축소 버튼처럼 한 번만 또는 반복해서 크기를 조절하고 있습니까? scaleUnitSquareToSize는이 상황에서 기대할 수있는대로 작동하지 않으며, 마침내이 Apple Q & A가 일부 빛을 비추는 것을 발견했습니다. https://developer.apple.com/library/mac/#qa/qa2004/qa1346.html하지만 여전히 뭔가 ' 맞아. 거기 카테고리를 사용하여 필자는 본질적으로 다음을 사용하고 있습니다. clipView = [documentView superview]; clipView.scale = NSMakeSize (스케일, 스케일); clipView.needsDisplay = YES; –

2

:

[[[[webView mainFrame] frameView] documentView] scaleUnitSquareToSize:NSMakeSize(1.5, 1.5)]; 
[[[[webView mainFrame] frameView] documentView] setNeedsDisplay:YES];