ios的app内使用webview嵌套H5,当进入H5的多层级页面时,使用手势返回并不会返回上一页,而是直接关闭webview,安卓并没有这个问题,请问有好的解决方法吗?
6条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
为了解决在iOS应用中的Webview内嵌H5页面时,手势返回导致整个Webview关闭的问题,可以尝试以下步骤进行调整:
- 创建一个Swift文件,例如
CustomWKWebView.swift,并添加以下内容:
import UIKit import WebKit class CustomWKWebView: WKWebView { override func viewDidLoad() { super.viewDidLoad() // 添加手势识别器 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap)) tapGesture.cancelsTouchesInView = false addGestureRecognizer(tapGesture) } @objc func handleTap(sender: UITapGestureRecognizer) { if canGoBack { goBack() } else { dismiss(animated: true, completion: nil) } } }这段代码创建了一个继承自
WKWebView的自定义类,并添加了一个tap gesture recognizer。当用户点击屏幕时,会检查是否可以回退到上一页面,如果可以则执行回退操作,否则关闭Webview。- 在你的视图控制器中,将原本的
WKWebView替换为CustomWKWebView。例如,在ViewController.swift中,修改加载Webview的部分:
import UIKit import WebKit class ViewController: UIViewController { var webView: CustomWKWebView! override func viewDidLoad() { super.viewDidLoad() webView = CustomWKWebView(frame: view.bounds) view.addSubview(webView) let myURL = URL(string: "https://yourwebsite.com")! let request = URLRequest(url: myURL) webView.load(request) } }- 确保已经导入了WebKit框架,并且在Info.plist中设置了允许跨域请求(如果你的应用需要跨域访问):
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>这个设置允许任意的网络请求,如果只是针对特定域名,可以使用
NSExceptionDomains来指定。通过以上步骤,你应该可以在iOS的App中实现使用返回手势正确地在H5页面之间切换,而不是直接关闭Webview。需要注意的是,这种方法可能会对用户体验产生一定影响,因为通常情况下,双击Home键也可以实现返回上一级的功能。如果可能,建议优化H5页面的导航逻辑,使其更符合原生应用的行为。
解决 无用评论 打赏 举报 编辑记录- 创建一个Swift文件,例如