kitoko552.memo

kitoko552のメモ

iOS9でWKWebViewのdecelerationRateの設定がうまくいかないときの対処法

要点

  • iOS9でWKWebViewのdecelerationRateの設定がうまくいかないのはiOSのバグ。
  • 対処法としては、WKWebViewのscrollViewのdelegateを指定し、scrollViewWillBeginDraggingでdecelerationRateを設定する。
class HogeViewController: UIViewController {
  var wkWebView: WKWebView! {
    didSet {
      wkWebView.scrollView.delegate = self
    }
  }
}

extension HogeViewController: UIScrollViewDelegate {
  func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    wkWebView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
  }
}
  • 以下を参考にしています。

stackoverflow.com

decelerationRateの設定がうまくいかないのはiOSのバグ

自分が所属しているプロジェクトのアプリが、iOS9の端末でweb閲覧面の慣性スクロールが効かなくなりました。
もちろんiOS8まではちゃんと動いていました。
ググると、同じような現象が起きていて困っている方の声がstack overflowをはじめとする他サイトで上がっています。
原因を調べると、decelerationRateの設定がうまくいかないというiOS9のバグのようです。

対処法

対処法としては、WKWebViewのscrollViewのdelegateを指定し、scrollViewWillBeginDraggingでdecelerationRateを設定すればうまく反映されます。

class HogeViewController: UIViewController {
  var wkWebView: WKWebView! {
    didSet {
      wkWebView.scrollView.delegate = self
    }
  }
}

extension HogeViewController: UIScrollViewDelegate {
  func scrollViewWillBeginDragging(scrollView: UIScrollView) {
    wkWebView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal
  }
}

おわり