WKWebView? allowsBackForwardNavigationGestures屬性作用是設置手勢前進后退,若需要單獨控制前進或者后退則需要對該屬性進行分解。
分析發現WKWebView的前進后退是由兩個UIScreenEdgePanGestureRecognizer (UIRectEdgeLeft、UIRectEdgeRigth) 手勢來控制的,在allowsBackForwardNavigationGestures SET 操作時候進行了手勢的增加刪除(刪除手勢并且手勢的target會被置nil)。并不是單純的enabled設置。
找到手勢就好辦了,創建一個AYWKWebView 繼承 WKWebView,
用NS_UNAVAILABLE宏禁用allowsBackForwardNavigationGestures,并且定義兩個分解屬性
在WebView init時候調用super.allowsBackForwardNavigationGestures = YES; (self.allowsBackForwardNavigationGestures已經被禁用),重寫-[addGestureRecognizer:]方法,UIScreenEdgePanGestureRecognizer手勢進行強引用,把新添加的手勢禁用掉,
然后在allowsBackNavigationGestures和allowsForwardNavigationGestures的 SET 方法設置對應手勢的enabled屬性,
重寫-[addGestureRecognizer:]為避免其它UIScreenEdgePanGestureRecognizer手勢干擾,增加一個allowsBackNavigationGesturesSet屬性標記是否是由于allowsBackNavigationGestures設置導致,在[supersetAllowsBackForwardNavigationGestures:]方法執行前后進行allowsBackNavigationGesturesSet開關控制
然后改寫一下-[addGestureRecognizer:]方法
這樣就實現了allowsBackForwardNavigationGestures屬性的分解