妖妖的耳朵 2024-04-24 23:25 采纳率: 33.3%
浏览 37

iOS的app嵌套H5,使用返回手势关闭webview

ios的app内使用webview嵌套H5,当进入H5的多层级页面时,使用手势返回并不会返回上一页,而是直接关闭webview,安卓并没有这个问题,请问有好的解决方法吗?

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-24 23:25
    关注

    引自免费微信小程序:皆我百晓生

    为了解决在iOS应用中的Webview内嵌H5页面时,手势返回导致整个Webview关闭的问题,可以尝试以下步骤进行调整:

    1. 创建一个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。

    1. 在你的视图控制器中,将原本的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)
        }
    }
    
    1. 确保已经导入了WebKit框架,并且在Info.plist中设置了允许跨域请求(如果你的应用需要跨域访问):
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
    

    这个设置允许任意的网络请求,如果只是针对特定域名,可以使用NSExceptionDomains来指定。

    通过以上步骤,你应该可以在iOS的App中实现使用返回手势正确地在H5页面之间切换,而不是直接关闭Webview。需要注意的是,这种方法可能会对用户体验产生一定影响,因为通常情况下,双击Home键也可以实现返回上一级的功能。如果可能,建议优化H5页面的导航逻辑,使其更符合原生应用的行为。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月24日

悬赏问题

  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit