返回首页

Swift / WKWebView 图片上传踩坑

解决 iPhone WKWebView 上传图片时弹出选择 view 把 NavigationController 一起关掉的问题。

发布 2017年6月26日 标签 #swift #ios #webview

~/posts/swift-wkwebview-photo-upload $ cat post.md

/ 语言 EN / 中文
/ 主题 / /

解决 HTML 标签打开选择图片列表导致闪退的问题

下面这段代码重写 UINavigationControllerdismiss 方法,用来支持网页里通过 <input type="file"> 上传图片。

extension UINavigationController {
    override open func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
        if self.presentedViewController != nil {
            super.dismiss(animated: flag, completion: completion)
        }
    }
}

需要这段代码是因为 iOS 上一个长期没修的 bug。iPad 上没事,但在 iPhone 上要上传图片时,会从底部弹出一个图片源选择 view(相机 / iCloud / 照片库 / 取消)。这个 view 在 WKWebView 里打开时,会挂在 WebView 上,而不是 NavigationController 上,因此也不会接到子 NavigationController 的 dismiss 调用。

结果是这个 view 关闭时——不论是点相机、iCloud、照片库还是取消——整个外层 NavigationController 会一起被关掉。用上面的 dismiss 重写可以拦住这种意外关闭。

返回首页