Câu hỏi UIWebView không mở rộng nội dung cho vừa


Tôi có một webview là cửa sổ trên cùng trong hệ thống phân cấp và đã được khai báo như hình dưới đây. Tuy nhiên, nó không quy mô các trang để phù hợp. Các trang được căn chỉnh trên cùng bên trái, nhưng không được thu nhỏ, mặc dù thuộc tính scalesPageToFit được đặt thành YES. Mọi sự trợ giúp sẽ rất được trân trọng.

webLookupView = [[UIWebView alloc] initWithFrame:CGRectMake(16, 63, 289, 327)];
webLookupView.backgroundColor = [UIColor lightGrayColor];
webLookupView.dataDetectorTypes = UIDataDetectorTypeAll;
webLookupView.scalesPageToFit = YES;

39
2017-10-02 20:44


gốc




Các câu trả lời:


iOS5 mang lại giải pháp tốt hơn

gọi từ webViewDidFinishLoad

- (void)zoomToFit
{ 
    if ([theWebView respondsToSelector:@selector(scrollView)])
    {
        UIScrollView *scrollView = [theWebView scrollView];

        float zoom = theWebView.bounds.size.width / scrollView.contentSize.width;
        scrollView.minimumZoomScale = zoom;
        [scrollView setZoomScale:zoom animated:YES];
    }
}

34
2017-07-06 18:34



Tôi đã thử nó nhưng nó không hiệu quả với tôi. Phương thức webViewDidFinishLoad đang được gọi, nhưng nó không ảnh hưởng đến kích thước - Dejell
@ Fancanck, bạn đã thử chuyển hoạt hình: YES thành NO? - Antzi
đã làm việc, nhưng cần phải kiểm tra "Các trang cân đối" trên webview. - codrut
Giải pháp duy nhất tôi tìm thấy hoạt động! - jowie
Điều này là rất tốt, nhưng ngay sau khi nó vảy, nó bật trở lại kích thước trước đó. Bất kỳ ý tưởng? - Alex Zavatone


Sau đó tôi đã phát hiện ra rằng một số trang web được chia tỷ lệ chính xác, nhưng một số trang thì không. Đối với các trang web không được thu nhỏ, javascript có thể được sử dụng để điều khiển thu phóng như sau:

NSString *jsCommand = [NSString stringWithFormat:@"document.body.style.zoom = 1.5;"];
[webLookupView stringByEvaluatingJavaScriptFromString:jsCommand];

27
2017-10-03 14:15



vấn đề với phương pháp đó là tôi có thể thấy nó tải trang ở kích thước thực, và một giây sau nó tự cập nhật với kích thước phù hợp ... có vẻ không tốt. Bạn có giải pháp khác không? - Lior Frenkel
Thật không may tôi không nhưng tôi có thể đề nghị bạn ẩn webview cho đến khi phóng to đã được thực hiện. - RunLoop
Quy mô CSS không phù hợp với nhiều trang web, vì vậy [scroll setZoomScale:animated:] được ưu tiên, nhưng bạn cần phải xác thực thu phóng để ở trong phạm vi phù hợp! Có vẻ như một lỗi trong UIWebView lớp hoặc hành vi kỳ lạ. Xin vui lòng, kiểm tra bình luận của tôi ở trên :) - rudyryk


Bạn có thể sử dụng mã dưới đây:

self.webView.scalesPageToFit = YES;
self.webView.contentMode = UIViewContentModeScaleAspectFit;

trong - (void)webViewDidFinishLoad:(UIWebView *)webView method hoặc là viewDidLoad


21
2018-02-27 07:35



hoặc trong giao diện Builder :) - RyanM


Nếu bạn có quyền truy cập vào html bạn đang tải, bạn có thể bỏ qua thẻ meta sau trong tiêu đề:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

12
2017-07-06 22:30





trong Swift2

self.webView.scalesPageToFit = true
self.webView.contentMode = UIViewContentMode.ScaleAspectFit

7
2017-10-09 18:44



Hoặc chỉ cần đánh dấu trang Scales để phù hợp với cốt truyện hoặc xib trong Attribute Inspector của webview. - Bhumit Mehta
không làm việc với swft 4 - Vineesh TP


Giải pháp của tôi nhanh chóng:

"Các trang cân đối để phù hợp" trên webView cần được kiểm tra trong trình tạo giao diện.

Sử dụng UIWebViewDelegate.

func webViewDidFinishLoad(webView: UIWebView) {
    let zoom = webView.bounds.size.width / webView.scrollView.contentSize.width
    webView.scrollView.setZoomScale(zoom, animated: true)
}

2
2017-07-23 14:19



webViewDidFinishLoad không hoạt động nhanh - Vineesh TP


Như mprivate đề cập đây bạn có thể cập nhật mức thu phóng của UIWebView.

- (void)webViewDidFinishLoad:(UIWebView *)theWebView {
  CGSize contentSize = theWebView.scrollView.contentSize;
  CGSize viewSize = theWebView.bounds.size;

  float rw = viewSize.width / contentSize.width;

  theWebView.scrollView.minimumZoomScale = rw;
  theWebView.scrollView.maximumZoomScale = rw;
  theWebView.scrollView.zoomScale = rw;  
}

Một cách khác để đạt được điều này sẽ là tiêm mã js trên webViewDidFinishLoad như RunLoop nói.

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  CGFloat scale = 0.8; // the scale factor that works for you 
  NSString *js = [NSString stringWithFormat:@"document.body.style.zoom = %f;",scale];
  [webView stringByEvaluatingJavaScriptFromString:js];
}

2
2018-01-04 21:34





Dành cho Swift 3, sử dụng RunLoopCâu trả lời hiệu quả:

self.webView.stringByEvaluatingJavaScript(from: "document.body.style.zoom = 1.5;")


1
2017-10-19 03:27





Trong xCode 8.3.3, chuyển đến bảng phân cảnh của chế độ xem / cảnh nơi chế độ xem web được đặt và kiểm tra Trang tỷ lệ để Vừa với mục kiểm tra thuộc tính. Cũng chọn Scale to Fill là chế độ nội dung.


0
2017-08-11 19:34