2012-03-06 41 views
5

Vì vậy, tôi có một số UIWebView hiển thị nội dung html tĩnh.UIWebView - Không thay đổi kích thước nội dung về thay đổi xoay?

Khi tôi bắt đầu ViewController theo chiều dọc và chuyển sang ngang, nó sẽ thay đổi kích thước nội dung chính xác.

Tuy nhiên, khi tôi bắt đầu trang ở chế độ ngang và chuyển sang dọc, nó không thay đổi kích thước nội dung của tôi và cần phải cuộn để xem tất cả nội dung.

Đây có phải là lỗi không? Có giải pháp nào để buộc thay đổi kích thước nội dung của UIWebView không?

+0

Xem http: // stackoverflow.com/questions/6007904/uiwebview-donest-resize-correct-khi-direction-change – buley

Trả lời

8

Bạn có 2 lựa chọn:
Thêm này vào HEAD phần của tập tin html của bạn:

<meta name="viewport" content="width=device-width" /> 

Hoặc gọi [myWebView reload] khi định hướng thay đổi

+0

Tôi đã thử tùy chọn đầu tiên và vẫn còn khoảng 5 pixel cuộn mà tôi không thích. Tôi sẽ thử giải pháp thứ hai vào ngày mai, nếu điều đó không làm cho webView nhấp nháy trong khi tải lại, nó sẽ là một giải pháp có thể chấp nhận được. Cảm ơn – aryaxt

3

Tôi đã có một vấn đề tương tự. Tôi giải quyết nó bằng cách thực hiện mã javascript để tạo ra một sự kiện cập nhật các định hướng trang khi xoay UIViewController xong:

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [webView stringByEvaluatingJavaScriptFromString:@"var e = document.createEvent('Events'); " 
                @"e.initEvent('orientationchange', true, false);" 
                @"document.dispatchEvent(e); "]; 
} 
+0

Đã không làm việc cho tôi – aryaxt

+0

Thậm chí không cho tôi. – Tarun

1

Câu hỏi này là cũ, nhưng điều này nên giải quyết nó:

myWebView.scalesPageToFit = YES;

Cách khác, nếu bạn đang sử dụng Trình tạo giao diện, bạn có thể chọn hộp kiểm trong Thuộc tính thanh tra có nội dung 'Trang bán hàng để phù hợp'.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn! Không nhận ra giải pháp đó là thẳng thắn. –

+2

không làm việc cho tôi! –

0

Tôi đã kết thúc bằng cách tiếp cận thứ hai của @Sergey Kuryanov kể từ lần đầu tiên tôi không làm việc cho tôi. Tôi đã sử dụng phương thức loadHTMLString của UIWebView để bạn sẽ thấy rằng trong mã nhưng bạn có thể thay thế nó bằng bất kỳ phương thức nào bạn đang sử dụng để tải dữ liệu trong UIWebView.

Điều đầu tiên cần làm là đăng ký thông báo xoay. Để làm điều đó, tôi đã theo dõi câu trả lời của @ clearwater82 về vấn đề trong câu hỏi này: How to detect rotation for a programatically generated UIView
Tôi viết lại câu trả lời của mình cho Swift 3, bạn có thể tìm thấy câu trả lời trong cùng một trang.

Khi đã xong, thật dễ dàng tải lại dữ liệu trong UIWebView bằng cách sử dụng loadHTMLString. Cách tiếp cận của tôi là bọc UIWebView bên trong một chế độ xem tùy chỉnh để tôi cũng có thể xử lý một số định dạng của HTML trực tiếp bên trong chế độ xem tùy chỉnh của tôi. Điều này làm cho nó rất đơn giản để thêm tính năng "reload-on-rotation". Đây là mã tôi đã sử dụng, các chi tiết trong câu trả lời liên quan:

// Handle rotation 
UIDevice.current.beginGeneratingDeviceOrientationNotifications() 
NotificationCenter.default.addObserver(
    self, 
    selector: #selector(self.orientationChanged(notification:)), 
    name: NSNotification.Name.UIDeviceOrientationDidChange, 
    object: nil 
) 

// Called when device orientation changes 
func orientationChanged(notification: Notification) { 
    // handle rotation here 
    self.webView.loadHTMLString(self.htmlText, baseURL: nil) 
} 

deinit { 
    NotificationCenter.default.removeObserver(self) 
    UIDevice.current.endGeneratingDeviceOrientationNotifications() 
} 

Tôi chỉ muốn chỉ ra hai điều:

  • self.htmlText là một biến giữ văn bản HTML Tôi muốn tải mà tôi thêm vào giao diện tùy chỉnh của tôi
  • việc sử dụng UIDevice.current.endGeneratingDeviceOrientationNotifications() là phù hợp với hoàn cảnh của tôi, nó có thể không được cho bạn

đó là tất cả, cheers

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