2017-09-01 20 views
7

Tôi đang tạo trên một ứng dụng bằng cách sử dụng Objective C, nơi tôi đang sử dụng một UIWebView để hiển thị nội dung ở định dạng HTML. Tôi đang sử dụng bên dưới mã trong phương pháp UIWebView đại biểu webViewDidFinishLoadTính toán Chiều cao động Nội dung UIWebView bằng cách sử dụng 'document.body.scrollHeight;' trả về giá trị lớn hơn trong iOS 10

NSUInteger contentHeight = [[aWebView stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat: @ "document.body.scrollHeight;"]] intValue];

để tính toán chiều cao nội dung webview, điều này đang làm việc tốt trong iOS8, iOS9iOS11 nhưng trong iOS10 iPhone điện thoại di động chiều cao nội dung trả về một giá trị lớn hơn nhiều so với giá trị nội dung thực tế. Bởi vì điều này, tôi nhận được một số không gian trắng thêm ở dưới cùng của webview của tôi trong màn hình.

Tôi đã thử tất cả các giải pháp nhưng chỉ nhận được cùng chiều cao nội dung sai trong iOS 10. Vui lòng giúp tôi giải quyết vấn đề này. Cảm ơn bạn trước!

Trả lời

0

Đáng buồn thay, tôi cũng không thể theo dõi sự cố. NHƯNG, tôi nghĩ rằng tôi biết thủ phạm: html <tables> và tự động thay đổi kích thước. Có một chút công bằng của cuộc thảo luận, trong thay đổi safari của apple, về khung nhìn và thay đổi hiển thị, nhưng không có gì cụ thể đủ.

Nó sẽ xuất hiện trên webview (safari powered) hiển thị HTML khác nhau giữa các phiên bản; làm cho tinh thần, mặc dù tôi không thể chưng cất nhiều vần điệu hoặc lý do và css rõ ràng cho <table><body> mang lại không có gì.

Hy vọng rằng, câu trả lời một phần này sẽ giúp thực hiện một số tiến bộ hoặc ít nhất một công việc xung quanh.

0

Tôi đã vật lộn khá nhiều để thay đổi kích thước WebView một cách chính xác.

Cố gắng thêm một bước nữa trước khi đánh giá document.body.scrollHeight.

Something như thế này:

-(void) webViewDidFinishLoad:(UIWebView *)webView { 
    if[[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]){ 
webViewHeight = [[WebView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue]; 
//resize logic 
} 

Tôi đang viết mã của tôi trong nhanh chóng và cho WKWebView, nhưng đó là điều tương tự về cơ bản. Vấn đề là bắt scrollHeight (hoặc offsetHeight - không thể tìm ra sự khác biệt trong trường hợp này) vào đúng thời điểm, và có vẻ như khoảnh khắc đó chỉ sau document.readyState.

Hy vọng điều này sẽ giúp bạn.

+0

Cảm ơn bạn đã phản hồi, tôi đã thử nghiệm mã trên nhưng không hoạt động. –

0

Tôi đã sử dụng cách sau để lấy contentSize.

tôi đã thêm người quan sát (KVO) vào chế độ xem cuộn của chế độ xem web.

self.webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil); 

Bây giờ, bất cứ khi nào contentsize của webview sẽ được thay đổi, tôi nhận được gọi lại trong phương pháp này

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
} 

Bây giờ lấy contentSize của đối tượng từ phương pháp này và sử dụng đó.

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