2011-10-09 34 views
7

Tôi có một UIWebView bên trong UIScrollView.cách chuyển tiếp UIWebView cuộn đến UIScrollView? (có điều kiện)

ý tưởng Đây là để có thể tạo thêm không gian đọc trên màn hình khi người dùng di chuyển các trang web trở lên - bằng cách di chuyển UIScrollView lên đến thanh công cụ có thể nhìn thấy, và rõ ràng khi các thanh công cụ là nomore có thể nhìn thấy thực sự di chuyển trang web để hiển thị nhiều nội dung hơn trên trang.

Trình duyệt IPhone Safari thực hiện chính xác chức năng tương tự.

xem ảnh chụp màn hình (đầu tiên) để biết hành vi mặc định tôi đang nhận - tôi đoán vì: thông báo cuộn được tiêu thụ bởi chế độ xem web vì chạm/cuộn đang diễn ra trực tiếp trên khu vực xem web.

những gì tôi muốn làm ở đây là lập trình quyết định khi nào chuyển tiếp 'cuộn lên' tới UIScrollivew và khi nào thì không.

Bất kỳ mẹo nào về cách giải quyết vấn đề này sẽ hữu ích. Cảm ơn!!

enter image description here

enter image description here

Trả lời

0

Bạn có thể thêm một hộp tìm kiếm và UIWebView trong một UIScrollView dưới đây khác. Để có được nội dung bù đắp khi webview được cuộn, bạn có thể sử dụng đoạn mã sau.

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

Bây giờ bạn có thể thay đổi giá trị y của giá trị cuộn của giá trị cuộn xuống giá trị bù trừ bạn nhận được từ phương thức ủy nhiệm didcroll của scrollview.

2

Các UIWebView class reference không khuyến khích nhúng một UIWebView trong một UIScrollView:

Chú ý: Bạn không nên nhúng UIWebView hoặc UITableView đối tượng trong đối tượng UIScrollView. Nếu bạn làm như vậy, hành vi không mong muốn có thể dẫn đến kết quả là vì các sự kiện chạm cho hai đối tượng có thể được trộn lẫn và xử lý sai .

Tuy nhiên tôi cho rằng bạn vẫn muốn thực hiện chức năng của mình ;-)

Idea 1: Đừng nhúng UIWebView trong một UIScrollView, thay vì chạy javascript sử dụng phương pháp stringByEvaluatingJavaScriptFromString: UIWebView của, sửa đổi DOM để thêm thanh công cụ bên dưới. Nếu được yêu cầu, bạn có thể gọi lại mã khách quan-c từ bất kỳ nút nào được đẩy trên thanh công cụ bằng cách đăng ký một số lược đồ URL tùy chỉnh.

Ý tưởng 2: Không nhúng UIWebView vào UIScrollView, nhưng trong UIView bình thường. Xây dựng dựa trên đề xuất của Vignesh, hãy lắng nghe số lần gọi lại của người xem trên webViewView scrollViewDidScroll: qua đại biểu, kiểm tra chiều cao contentOffset so với chiều cao contentSize mỗi lần gọi lại. Một khi họ bằng nhau, nó có nghĩa là bạn đã xuống đáy. Khi điều này xảy ra, bạn có thể tạo hiệu ứng cho khung thanh công cụ của bạn để "nhập" UIView chứa và "đẩy" khung của webView đi.

Ý tưởng 3: Bỏ qua đề xuất của Apple và nhúng UIWebView vào UIScrollView. Xây dựng dựa trên đề xuất của Vignesh, hãy lắng nghe số lần gọi lại của người xem trên webViewView scrollViewDidScroll: qua đại biểu, kiểm tra chiều cao contentOffset so với chiều cao contentSize mỗi lần gọi lại. Một khi họ bằng nhau, nó có nghĩa là bạn đã xuống đáy. Khi điều này xảy ra, hãy đặt thuộc tính userInteractionEnabled của webView thành NO và đặt thành YES trên scrollView chứa webView và thanh công cụ. Hy vọng rằng cuộn sẽ tiếp tục trôi chảy đủ. Tất nhiên bạn phải nghe chế độ xem cuộn có chứa trong cùng một cách để xác định thời điểm chuyển đổi lại userInteractionEnabled. Một biến thể trên ý tưởng này sẽ là chỉ cần đặt userInteractionEnabled thành NO cho webView, nhưng đặt chiều cao của khung hình webView để phù hợp với nội dung của nóSize, và cũng có thể phóng to contentSize của scrollView có chứa cho phù hợp.

Cả hai biến thể đều có nhược điểm là trong một số trường hợp, bạn sẽ không thể thực hiện những việc như bấm vào liên kết :-(Nhưng có lẽ điều đó là đủ tốt cho trường hợp của bạn.

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