Swift / WKWebView 图片上传踩坑
解决 iPhone WKWebView 上传图片时弹出选择 view 把 NavigationController 一起关掉的问题。
~/posts/swift-wkwebview-photo-upload $ cat post.md
解决 HTML 标签打开选择图片列表导致闪退的问题
下面这段代码重写 UINavigationController 的 dismiss 方法,用来支持网页里通过 <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 重写可以拦住这种意外关闭。