2016-12-01 23 views
10

Tôi phải tích hợp WKWebView bên trong UITableView (vui lòng không đặt câu hỏi đó).WKWebXem không hiển thị nội dung "bên dưới màn hình"

Tôi đảm bảo cuộn WKWebView bị tắt, theo cách này tôi tránh có chế độ xem có thể cuộn trong chế độ xem có thể cuộn (UITableView).

Tuy nhiên, khi nội dung HTML bên trong WKWebview lớn, giả sử hai lần màn hình, tôi thấy rằng nội dung bên dưới màn hình không được hiển thị cho người dùng, tức là khi người dùng cuộn chế độ xem bảng chỉ có màu trắng \ màn hình trống nơi WKWebView là ...

tôi cập nhật chiều cao của WebViewTableViewCell theo:

public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 

    let height = webView.scrollView.contentSize.height 
    ... 
    ... 
    delegate.updateWebViewCellHeight(height: self.cellHeight) 
} 

tôi đoán nó có thể là ảnh hưởng của một số tối ưu hóa trên WKWebView cho phép nó để render chỉ khi của DOM họ được hiển thị trên màn hình.

Câu hỏi của tôi là, tôi có thể làm gì để đảm bảo tất cả nội dung bên trong WKWebView được hiển thị cho người dùng khi cô cuộn chế độ xem bảng?

P.S. UIWebView làm cho tất cả các nội dung tốt, có vẻ như để thể xảy ra chỉ trong WKWebView

Xem hình ảnh dưới đây:

enter image description here

+0

Bạn đặt kích thước khung/ô web ở đâu và khi nào? Nếu bạn dừng lại ở trình gỡ lỗi chế độ xem thì các chế độ xem có đúng kích thước không? – Wain

+0

Xem các chỉnh sửa của tôi về cách tôi đổi kích thước ô xem web –

+0

'webView.scrollView.contentSize' có thể không chính xác tại thời điểm thông báo được đăng. Tôi đề nghị thêm một người quan sát trên keyView 'webView.scrollView.contentSize' và sau đó cập nhật kích thước ô của bạn từ đó. –

Trả lời

9

Bạn có thể gọi setNeedsLayout trên WKWebView, (Swift):

Lưu ý đây là scrollview cho UITableView.

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    // use IndexPath for row/section with your WKWebView 
    if let cell = tableView.cellForRow(at: IndexPath(row: 1, section: 0)) as? WKWebViewCell { // Here we take our cell 
     cell.wkWebView?.setNeedsLayout() 
    } 
} 

Xem WKWebView not rendering correctly in iOS 10

1

Hãy chắc chắn rằng khi cập nhật chiều cao di động, TableViewCell không tải lại WebView. Nếu không, bạn sẽ bị mắc kẹt trong vòng lặp vô tận và hành vi kỳ lạ và chiều cao sẽ thiết lập lại một lần nữa và một lần nữa.

var CGFloat : webViewHeight = 0.0 

// Theo dõi chiều cao hiện tại của webView.

// MARK: - WKWebView Delegate 
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 

    weak var weakSelf = self 
    webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none';") { (object : Any?, error : Error?) in 

     if (error == nil) { 
      let size : CGRect = self.heightForWebView(webView: webView) 

      if (weakSelf.webViewHeight == 0.0 || size.height != weakSelf.webViewHeight){ 
       weakSelf.webViewHeight = size.height 
      } 

      webView.frame = size 
      delegate.updateWebViewCellHeight(height: size.height) 
     } 
    } 
} 

// MARK: - WKWebView Heplper 
func heightForWebView(webView : WKWebView)-> CGRect { 
    var rect : CGRect = webView.frame as CGRect! 
    rect.size.height = 1 
    webView.frame = rect 

    let newSize : CGSize = webView.sizeThatFits(CGSize.zero) 
    rect.size = newSize 

    return rect 
} 
Các vấn đề liên quan