2013-02-07 13 views
32

Tôi đang xây dựng một ứng dụng tải một số lượng nhỏ đơn giản là nhỏ HTML (cục bộ) vào một UIWebView toàn màn hình. Tôi nhận thấy rằng việc cuộn chế độ xem web này cảm thấy khác biệt đáng kể so với việc cuộn bất kỳ UIScrollView nào khác. Điều này dường như không phải là một hiệu suất hoặc một vấn đề đáp ứng, mỗi lần ... Nó chỉ là một vấn đề làm thế nào động lượng phát ra khi bạn kéo và flick xem web lên và xuống. Nó chỉ không cảm thấy rất "bản địa" (vì thiếu một từ tốt hơn). Nó giống như cuộn qua mật đường hoặc bánh pudding ... kinda "dính" và không phải là "slick" như bạn muốn nó cảm thấy.Tại sao việc cuộn một UIWebView * cảm thấy * khác nhiều so với việc cuộn bất kỳ UIScrollView nào khác?

Có ai biết điều gì gây ra điều này không? Có cách nào để sửa chữa nó, hoặc ít nhất làm cho di chuyển một UIWebView cảm thấy "bản địa"?

+0

Bạn đang hiển thị loại HTML nào? Có thể có cách để hoàn thành mọi thứ bằng cách sử dụng các điều khiển gốc. –

+0

@JackLawrence - HTML thực sự do người dùng tạo, được kéo từ máy chủ theo định kỳ và được lưu trữ trong dữ liệu cốt lõi. Tôi về mặt lý thuyết có thể triển khai chế độ xem với các điều khiển gốc, nhưng nó không linh hoạt như hiển thị trực tiếp dữ liệu do người dùng tạo. – wxactly

Trả lời

53

Tôi có cùng nhận thức. Nó phải liên quan đến tốc độ giảm tốc của scrollView của webView. Chỉ cần chạy thử nghiệm này, và 1) nó xác nhận nghi ngờ của chúng tôi và 2) cho thấy một sửa chữa.

Tôi đã thêm một scrollview và một WebView để UI của tôi sau đó đăng nhập như sau:

NSLog(@"my scroll view's decel rate is %f", self.scrollView.decelerationRate); 
NSLog(@"my web view's decel rate is %f", self.webView.scrollView.decelerationRate); 
NSLog(@"normal is %f, fast is %f", UIScrollViewDecelerationRateNormal, UIScrollViewDecelerationRateFast); 

Kết quả khẳng định đoán về WebView đang được nhiều ma sát:

my scroll view's decel rate is 0.998000 
my web view's decel rate is 0.989324 
normal is 0.998000, fast is 0.990000 

Và gợi ý cách khắc phục:

self.webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 
+0

mượt mà. Hoàn hảo. Cảm ơn! – wxactly

+15

Cần lưu ý rằng điều này được thực hiện vì lượt xem web đắt hơn nhiều so với hầu hết các chế độ xem khác. Việc di chuyển "cứng hơn" giúp ẩn điều này bằng cách đảm bảo có ít vùng mới hơn để vẽ khi người dùng cuộn. Điều đó không có nghĩa là bạn không nên thay đổi điều này nếu bạn biết một chế độ xem web cụ thể có thể xử lý nó, nhưng hãy nhớ rằng * đang * được thực hiện vì lý do và bạn nên đảm bảo rằng đó không phải là vấn đề đối với trường hợp sử dụng của bạn. –

+0

Điều này thật tuyệt vời! Tôi hy vọng nó hoạt động cho dự án của tôi. Cảm ơn bạn. –