我有一个简单的Swift项目,其中:
ViewController A (class ViewController: UIViewController
)提供 ViewController B - (class WebViewController: UIViewController, WKNavigationDelegate, CLLocationManagerDelegate, WKScriptMessageHandler
)。
ViewController B本质上只是一个WKWebView,其viewDidLoad()
:
let contentController = WKUserContentController();
contentController.addScriptMessageHandler(
self,
name: "eventHandler"
)
let config = WKWebViewConfiguration()
config.userContentController = contentController
webView = WKWebView(frame: CGRectZero, configuration: config)
webView.navigationDelegate = self
webView.allowsBackForwardNavigationGestures = false
view = webView
因此,当呈现ViewController B时,我基本上只在整个屏幕上安装了一个Web浏览器。
我遇到的问题是,如果用户(在网页上)点击"文件上传/文件选择器",首先我看到:
传入类型public.item并不符合public.content或 public.data。如果要导出新类型,请确保它 符合适当的父类型。的行为 未定义UICollectionViewFlowLayout,因为项目宽度必须 小于UICollectionView的宽度减去该部分 插入左右值,减去左右内容插入 值。
相关的UICollectionViewFlowLayout实例是 < _UIAlertControllerCollectionViewFlowLayout:0x12e30f270>,它是 附属于 动画= {bounds.origin =; bounds.size =; 位置=; }; layer =; contentOffset:{0,0}; contentSize:{0,0}>采集 视图布局:< _UIAlertControllerCollectionViewFlowLayout: 0x12e30f270>
然后,如果用户选择"拍摄照片或视频"或者"照片库"从iOS选项列表中,我得到了这个:
警告:尝试显示UIImagePickerController:0x12d192200 My.WebViewController:0x12e2883e0,其视图不在窗口中 层次!
结果是:
有没有人有任何建议?我试图提供相关代码,但如果需要我可以粘贴更多代码。谢谢。
- 更新--------
好的,经过更多的研究,实际上还有两个不同的事情发生了:
第一个错误是"文件选择器"由移动浏览器处理。 See here ......宏伟的计划,不是什么大不了的事。
第二个错误Attempt to present UIImagePickerController...
- 这两个人更加虚弱 - 更加丑陋。
如果带有WKWebView的ViewController是从 另一个 ViewController呈现的,那么当用户尝试"选择"一个图像(来自图书馆或相机),iOS将尝试从你的WKWebView ViewController呈现UIImagePicker 。
不幸的是,由于我还不知道的原因,用户试图选择"选择"一个图像也会导致iOS关闭呈现的视图控制器...在这种情况下,它是你的WKWebView控制器:(因此,WKWebView ViewController解散,所以当它尝试时它不会在窗口层次结构中提出UIImagePicker - 因此,错误。
我的解决方案(非常hacky,但适用于我的特定用例),如下所示;我希望这有助于某人:
这实际上使得WKWebView无法被解雇,避免了这个问题。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("Browser") as! WebViewController
UIApplication.sharedApplication().keyWindow?.rootViewController = vc
self.presentViewController(vc, animated: false, completion: { () -> Void in
self.dismissViewControllerAnimated(false, completion: nil)
})
答案 0 :(得分:0)
如果你当前在viewDidLoad(){}
函数中使用int,那么尝试将代码移到覆盖viewDidAppear(animated: Bool) {}
我今天遇到了同样的问题并修复了它。