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
Nguồn
2017-03-15 09:12:36
Xem http: // stackoverflow.com/questions/6007904/uiwebview-donest-resize-correct-khi-direction-change – buley