2010-07-23 27 views
9

Tôi đã tìm tuần qua cho câu trả lời cho câu hỏi này.Cách đặt lại mức thu phóng của UIWebView? Tôi đã sử dụng scalesPagesToFit = YES;

Tôi có UIWebView, bên trong UIScrollView. Mọi thứ hoạt động tốt, nhưng tôi muốn nội dung của UIWebView để đặt lại thu phóng, khi định hướng thay đổi.

Trong HTML bên trong UIWebView, tôi đặt chiều rộng của chế độ xem (w/thẻ meta) thành "chiều rộng thiết bị" và sau đó ở phía Obj-C, tôi đặt scalesPagesToFit = YES;

Tôi đã thử đặt lại chế độ thu phóng bằng javascript; bằng cách thay thế thẻ meta trong thời gian chạy; tải lại; truy cập UIScrollView bên trong UIWebView; v.v ...

nhưng không thành công.

Bất kỳ vị thần nào của bạn có biết cách giải quyết khác không?

Là người duy nhất tôi có thể nghĩ ra là để tái tạo UIWebViews mỗi khi chúng ta thay đổi phương hướng, nhưng điều đó làm cho họ nhấp nháy sang màu trắng trong khi nội dung render, trông khủng khiếp :(

Bất kỳ suy nghĩ?

Rất cám ơn, Andre

+0

Có thể mẹo trong việc xây dựng lại các bản xem trước trên web? Tôi đã thử nó, nhưng họ flash trắng, vì thời điểm đó, nơi họ bị mất nội dung của họ, vì vậy nó không nhìn tuyệt vời. Bất kỳ cách giải quyết nào khác? – Andre

+0

Chụp trong bóng tối, nhưng tôi nghĩ phiên bản di động của trang wikipedia sẽ thực hiện việc này. Bạn có thể đạt đỉnh điểm ở dạng html/javascript. – Douglas

Trả lời

8

tôi chỉ đoán ở đây và đã không cố gắng, nhưng AFAIK một UIWebView có một đứa trẻ UIScrollView Vì vậy, ta nên có thể làm:.

for (UIScrollView *scroll in [myWebView subviews]) { 
    // Make sure it really is a scroll view and reset the zoom scale. 
    if ([scroll respondsToSelector:@selector(setZoomScale:)]) 
     [scroll setZoomScale:1.0]; 
} 
+0

Bạn có biết liệu điều này có vượt qua sự chấp thuận của App Store hay là API riêng tư không? Chúc mừng, Andre – Andre

+1

Điều này sẽ hoàn toàn ổn. Tôi đã nhìn thấy một bài viết sử dụng kỹ thuật tương tự để tắt chế độ xem khi kết thúc. Chỉ có các API công cộng được sử dụng ở đây nên không có gì để Apple phàn nàn. Nếu Apple quyết định thay đổi UIWebView để không sử dụng con UIScrollView thì mã này sẽ không bị lỗi, nó sẽ không thiết lập lại zoom nữa. – DarkDust

+1

Tuyệt. Chỉ để bạn biết, tôi đã thử mã này trước và nó không hoạt động. Tôi đã thấy rằng để làm cho nó hoạt động (trong trường hợp của tôi), trước tiên bạn cần phải thay thế các thẻ meta trong HTML, để thay đổi tỷ lệ tối đa của khung nhìn trở lại thành 1.0, và sau đó gọi setZoomScale. – Andre

1

Nếu bạn muốn làm điều đó theo chương trình này là cách duy nhất tôi có thể tìm để thực hiện điều đó: (ghi rõ kích thước của riêng bạn nếu bạn muốn, tôi đã cố gắng để thu nhỏ sau khi nhập vào một trường mẫu)

UIScrollView *sv = [[webViewView subviews] objectAtIndex:0]; 
[sv zoomToRect:CGRectMake(0, 0, sv.contentSize.width, sv.contentSize.height) animated:YES]; 
1

cập nhật: Giảm thiểu không hoạt động đúng khi sử dụng

[[[webView subviews] lastObject] setZoomScale:0.25]; 

chất lượng hình ảnh mà nó downscaled trên trang là khủng khiếp. Làm:

[[[webView subviews] lastObject] setZoomScale:0.25 animated:YES]; 

Sửa lỗi. Vì vậy, dòng cuối cùng là một trong những bạn có thể sử dụng.

webView được phân lớp của UIWebView nằm trên một số tệp IB. Tôi đã không sử dụng Viewport. Tôi thấy rằng một trong những nên chọn bằng cách làm điều này từ bên Cocoa Touch hoặc sử dụng JS.

tôi đã sử dụng:

webView.scalesPageToFit = YES; 

Tôi tự hỏi nếu có một cách để đặt lại scalesPageToFit.

3

Trên iOS 5+ bạn có quyền truy cập vào scrollView. Chỉ cần làm:

[webView.scrollView setZoomScale: 1.0];

+0

nó hoạt động tốt, cảm ơn. đây là cách đơn giản hơn vòng lặp for. nhưng như @Andre đã nói trong một nhận xét về câu trả lời được chấp nhận, trước tiên bạn cần phải thay thế các thẻ meta trong HTML để thay đổi tỷ lệ tối đa của khung nhìn trở lại thành 1.0 –

0

Thích ứng từ câu trả lời Captnwalker1, tôi đến với điều này:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if(toInterfaceOrientation ==UIInterfaceOrientationPortrait||toInterfaceOrientation==UIInterfaceOrientationMaskPortraitUpsideDown) 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
    else 
    { 
     currentScrollView = [[webView subviews] objectAtIndex:0]; 
     [currentScrollView zoomToRect:CGRectMake(0, 0, currentScrollView.contentSize.width, currentScrollView.contentSize.height) animated:NO]; 
    } 
} 

Vì vậy, tải hình ảnh webview của bạn, và hình ảnh sẽ thiết lập lại nó kích thước khi xoay.

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